题目描述
相信大家都听过经典的“八皇后”问题吧?这个游戏要求在_个8×8的棋盘上放置8个皇后,使8个皇后互相不攻击(攻击的含义是有两个皇后在同一行或同一列或同一对角线上)。
桐桐对这个游戏很感兴趣,也很快解决了这个问题。可是,她想为自己增加一点难度,于是她想求出n皇后的解的情况。你能帮助她吗?
桐桐对这个游戏很感兴趣,也很快解决了这个问题。可是,她想为自己增加一点难度,于是她想求出n皇后的解的情况。你能帮助她吗?
输入
一个数n(1≤n≤13),表示为n皇后问题。
输出
一个数,表示n皇后问题的解法总数。
样例输入
8
样例输出
92
1 #include<bits/stdc++.h> 2 using namespace std; 3 int c[20],cnt,n,a[100],b[100]; 4 void dfs(int i) 5 { 6 if(i==n) 7 { 8 cnt++; 9 return ; 10 } 11 for(int j=0;j<n;j++){ 12 if(!c[j]&&!a[i+j]&&!b[i-j+n-1]) 13 { 14 c[j]=1; 15 a[i+j]=1; 16 b[i-j+n-1]=1; 17 dfs(i+1); 18 c[j]=0; 19 a[i+j]=0; 20 b[i-j+n-1]=0; 21 } 22 } 23 } 24 int main() 25 { 26 cin>>n; 27 dfs(0); 28 cout<<cnt<<endl; 29 return 0; 30 }