八皇后回溯法

 1 #include <iostream>
 2 using namespace std;
 3 
 4 int ans=0;
 5 const int N = 8;
 6 int a[N][N]={0};
 7 
 8 void show(){
 9     cout<<"answer:"<<ans<<endl;
10     for(int i=0;i<N;i++){
11         for(int j=0;j<N;j++){
12             cout<<a[i][j]<<' ';
13         }
14         cout<<endl;
15     }
16     cout<<endl;
17 }
18 
19 bool check(int row,int col){
20     int i,j;
21     if(!row) return true;
22     for(i=row-1;i>=0;i--){//检查同一列上面的每一行
23         if(a[i][col]) return false;
24     }
25     for(i=row-1,j=col-1;i>=0&&j>=0;i--,j--){//检查左上 
26         if(a[i][j]) return false;
27     }
28     for(i=row-1,j=col+1;i>=0&&j<=N-1;i--,j++){//检查右上 
29         if(a[i][j]) return false;
30     }
31     return true;
32 }
33 
34 void func(int row){
35     for(int j=0;j<N;j++){
36         a[row][j]=1;
37         if(check(row,j)){
38             if(row==N-1){
39                 ++ans;show();
40             }else{
41                 func(row+1);
42             }
43         }
44         a[row][j]=0;
45     }
46 }
47 int main(){
48     func(0);
49     return 0;
50 }

 

posted @ 2019-06-30 21:17  xuecl  阅读(404)  评论(0编辑  收藏  举报