题目描述
相信大家都听过经典的“八皇后”问题吧?这个游戏要求在_个8×8的棋盘上放置8个皇后,使8个皇后互相不攻击(攻击的含义是有两个皇后在同一行或同一列或同一对角线上)。
桐桐对这个游戏很感兴趣,也很快解决了这个问题。可是,她想为自己增加一点难度,于是她想求出n皇后的解的情况。你能帮助她吗?
输入
一个数n(1≤n≤13),表示为n皇后问题。
输出
一个数,表示n皇后问题的解法总数。
样例输入
8
样例输出
92
# include<iostream>
# include<algorithm>
using namespace std;
int n,ans,b[301],c[301],d[301];
void ch(int j,int i,int s){
b[i]=j;
c[i+s]=j;
d[i-s+n-1]=j;
}
void dfs(int s){
if(s==n+1) {
ans++;
return ;
}
for(int i=1;i<=n;i++)
if(!b[i]&&!c[i+s]&&!d[i-s+n-1]){
ch(1,i,s);
dfs(s+1);
ch(0,i,s);
}
}
int main(){
cin>>n;
dfs(1);
cout<<ans;
return 0;
}