八皇后问题
输入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 }