题目描述
相信大家都听过经典的“八皇后”问题吧?这个游戏要求在_个8×8的棋盘上放置8个皇后,使8个皇后互相不攻击(攻击的含义是有两个皇后在同一行或同一列或同一对角线上)。
桐桐对这个游戏很感兴趣,也很快解决了这个问题。可是,她想为自己增加一点难度,于是她想求出n皇后的解的情况。你能帮助她吗?
输入
一个数n(1≤n≤13),表示为n皇后问题。
输出
一个数,表示n皇后问题的解法总数。
样例输入 Copy
8
样例输出 Copy
92
用三个数组来记录列,对角线喝和反对角线。
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int col[N],dg[N],udg[N];
int n;
int res;
void dfs(int u)
{
if(u==n)
{
res++;
return ;
}
else
{
for( int i=0;i<n;i++)
{
if(!col[i]&&!dg[u+i]&&!udg[n-u+i])
{
col[i]=dg[u+i]=udg[n-u+i]=1;
dfs(u+1);
col[i]=dg[u+i]=udg[n-u+i]=0;
}
}
}
}
int main()
{
cin>>n;
dfs(0);
cout<<res<<endl;
}