n皇后

转载请注明出处:http://www.cnblogs.com/zhishoumuguinian/p/8418082.html

 1 #include <iostream>
 2 #include<math.h>
 3 using namespace std;
 4 
 5 int allpos[100000][100];//存储皇后的所有位置
 6 int queenpos[100];//存储一次情况的皇后位置queenpos[j]代表第j行,第queenpos[j]列
 7 int m=0;//记录符合条件的数量
 8 int n;
 9 void dfs(int k)
10 {
11     if(k==n)
12     {
13         for(int i=0; i<n; i++)
14         {
15             allpos[m][i]=queenpos[i];
16         }
17         m++;
18         return;
19     }
20     int i,j;
21     for(i=0; i<n; i++)//遍历第k行,看看有没有合适的位置
22     {
23         for(j=0; j<k; j++)
24         {
25             if(fabs(queenpos[j]-i)==fabs(k-j)||i==queenpos[j])
26             {
27                 break;
28             }
29         }
30         if(j==k)
31         {
32             queenpos[k]=i;
33             dfs(k+1);
34         }
35     }
36 }
37 int main()
38 {
39     cin>>n;
40     dfs(0);
41     cout<<m<<endl;
42     for(int i=0; i<m; i++)//输出所有情况
43     {
44         for(int j=0; j<n; j++)
45         {
46             cout<<allpos[i][j]+1<<" ";
47         }
48         cout<<endl;
49     }
50 }

 

posted @ 2018-02-05 16:14  nefuer  阅读(101)  评论(0编辑  收藏  举报