题目描述
在 N×N 的方格棋盘放置了 N 个皇后,使得它们不相互攻击(即任意 2 个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成 45 角的斜线上。你的任务是,对于给定的 N,求出有多少种合法的放置方法。
输入输出样例
示例 1
输入
5
输出
10
#include<bits/stdc++.h>
using namespace std;
const int maxn=100010;
int t=0;
int n;
int C[maxn];
void dfs(int cur)
{
if(cur==n) t++;
else
{
for(int i=0;i<n;i++)
{
int flag=0;
C[cur]=i;//把第cur行皇后放在i列上
for(int j=0;j<cur;j++)
{
if(C[j]==C[cur]||cur-C[cur]==j-C[j]||cur+C[cur]==j+C[j])//不用考虑行
{
flag=1;//标记皇后状态
break;
}
}
if(flag==0)
{
dfs(cur+1);
}
}
}
}
int main()
{
cin>>n;
dfs(0);
cout<<t;
return 0;
}