深度优先搜索——八皇后问题
代码:(控制台打印不了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 }


浙公网安备 33010602011771号