代碼:(控制台打印不了92種情況,只打印前10種)
1 #include<iostream> 2 #include<string> 3 #include<windows.h> 4 #define ok 1 5 #define error 0 6 using namespace std; 7 8 9 int a[9][9]={0}; 10 int num=0; 11 12 int Ifblock(int x,int y) //判斷有沒有產生沖突 13 { 14 int i,j,k; 15 j=y; 16 k=y; 17 for(i=x-1;i>0;i--) 18 { 19 if(a[i][y]==1) 20 return error; 21 if((--j)>0&&a[i][j]==1) 22 return error; 23 if((++k)<9&&a[i][k]==1) 24 return error; 25 } 26 return ok; 27 } 28 29 int DFS(int step) //深度優先搜索核心代碼 30 { 31 int i,j,k; 32 if(step==9) 33 { 34 num++; 35 if(num<=10) 36 { 37 for(j=1;j<9;j++) 38 { 39 for(k=1;k<9;k++) 40 { 41 printf("%2d",a[j][k]); 42 } 43 cout<<'\n'; 44 } 45 cout<<'\n'<<endl; 46 } 47 return ok; 48 } 49 for(i=1;i<9;i++) 50 { 51 if(Ifblock(step,i)) 52 { 53 a[step][i]=1; 54 //step++ 55 DFS(step+1); 56 a[step][i]=0; 57 } 58 } 59 return ok; 60 } 61 62 int main() 63 { 64 int step=1; 65 DFS(step); 66 cout<<"一共"<<num<<"種可能"<<endl; 67 return 0; 68 }