试题:算法训练与车的放置(蓝桥杯C++项目)
发布时间
阅读量:
阅读量
问题描述
在一个n乘n的棋盘上,每个格子最多只能放置一个车,并且需要确保任意两个车之间无法互相攻击,那么共有多少种不同的放置方式(车与车之间是无法区分的)
输入格式
输入包含一个正整数n
输出格式
输出一个整数,表示所有可能的放置方式数目
样例输入
2
样例输出
7
数据规模和约定
n<=8
【样例解释
#include <bits/stdc++.h>
using namespace std;
int N;
long long ans=1; //刚开始什么也不放也属于一种答案
bool visited[10]; //标志被放置的列
void dfs(int step) //表示从第step行开始放
{
if(step>N) return ; //如果超过规定的棋盘边界N,跳出。
for(int i=1;i<=N;i++)
if(!visited[i]) //如果这一列没有被放置
{
visited[i]=true; //在这个位置放置它
ans++; //该情况的答案+1
dfs(step+1); //肯定不能在同一行放了,跳到下一行
全部评论 (0)
还没有任何评论哟~
