桐桐的数学游戏

  题目描述  

相信大家都听过经典的“八皇后”问题吧?这个游戏要求在_个8×8的棋盘上放置8个皇后,使8个皇后互相不攻击(攻击的含义是有两个皇后在同一行或同一列或同一对角线上)。
桐桐对这个游戏很感兴趣,也很快解决了这个问题。可是,她想为自己增加一点难度,于是她想求出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 }
View Code
 

猜你喜欢

转载自www.cnblogs.com/scott527407973/p/9381074.html
今日推荐