1 //8皇后问题
2 #include <stdio.h>
3 int res=0;
4 int a[8][8]={0};
5 //检查放在此位置是否与上面的行冲突
6 int check(int i,int j)
7 {
8 int x,y;
9 for(x=i-1;x>=0;x--)if(a[x][j]==1)return 0;
10 for(y=j-1;y>=0;y--)if(a[i][y]==1)return 0;
11 for(x=i-1,y=j-1;x>=0&&y>=0;x--,y--)if(a[x][y]==1)return 0;
12 for(x=i-1,y=j+1;x>=0&&y<8;x--,y++)if(a[x][y]==1)return 0;
13 return 1;
14 }
15 //按行放 每行放一个
16 void dfs(int row)
17 {
18 if(row==8)
19 {
20 res++;
21 return;
22 }
23 int col;
24 for(col=0;col<8;col++)
25 {
26 if(check(row,col))
27 {
28 a[row][col]=1;
29 dfs(row+1);
30 a[row][col]=0;
31 }
32 }
33 }
34 int main()
35 {
36 dfs(0);
37 printf("%d\n",res);
38 return 0;
39 }