八皇后问题

输入n,输出满足条件的n*n皇后的排列以及总解数
输入:
6
4
输出:
2 4 6 1 3 5
3 6 2 5 1 4
4 1 5 2 6 3
5 3 1 6 4 2
4
2 4 1 3
3 1 4 2
2

 1 #include<iostream>
 2 using namespace std;
 3 int n,tot;
 4 int C[15];
 5 void print()
 6 {
 7     int i,ok=0;
 8     for(i=0;i<n;i++){
 9         if(ok==0){cout<<C[i]+1;ok=1;}
10         else cout<<" "<<C[i]+1;
11     }
12     cout<<"\n";
13 }
14 void search(int cur)
15 {
16     int i,j;
17     if(cur==n)
18     {
19         tot++;
20         print();
21     }
22     else for(i=0;i<n;i++)
23     {
24         int ok=1;
25         C[cur]=i;
26         for(j=0;j<cur;j++)
27             if(C[cur]==C[j]||cur-C[cur]==j-C[j]||cur+C[cur]==j+C[j]){ok=0;break;}
28         if(ok)search(cur+1);
29     }
30 }
31 int main()
32 {
33     while(cin>>n)
34     {
35         tot=0;
36         search(0);
37         cout<<tot<<endl;
38     }
39     return 0;
40 }
41 
42 
43 
44 #include<iostream>
45 #include<cstring>
46 using namespace std;
47 int n,tot;
48 int C[15];
49 int vis[3][30]={0};
50 void print()
51 {
52     int i,ok=0;
53     for(i=0;i<n;i++){
54         if(ok==0){cout<<C[i]+1;ok=1;}
55         else cout<<" "<<C[i]+1;
56     }
57     cout<<"\n";
58 }
59 void search(int cur)
60 {
61     int i,j;
62     if(cur==n)
63     {
64         tot++;
65         print();
66     }
67     else for(i=0;i<n;i++)
68     {
69         if(!vis[0][i]&&!vis[1][cur+i]&&!vis[2][cur-i+n])
70         {
71             C[cur]=i;
72             vis[0][i]=vis[1][cur+i]=vis[2][cur-i+n]=1;
73             search(cur+1);
74             vis[0][i]=vis[1][cur+i]=vis[2][cur-i+n]=0;
75         }
76     }
77 }
78 int main()
79 {
80     while(cin>>n)
81     {
82         tot=0;
83         search(0);
84         cout<<tot<<endl;
85     }
86     return 0;
87 }

 

posted @ 2013-02-07 18:52  再见~雨泉  阅读(175)  评论(0编辑  收藏  举报