1 public static int[][] arry=new int[8][8];//棋盘,放皇后
2 public static int map=0;//存储方案结果数量
3
4 public static void main(String[] args) {
5 // TODO Auto-generated method stub
6
7 System.out.println("八皇后问题");
8 findQueen(0);
9 System.out.println("八皇后问题共有:"+map+"种可能");
10 }
11
12 public static void findQueen(int i){//寻找皇后节点
13 if(i>7){//八皇后的解
14 map++;
15 print();//打印八皇后的解
16 return;
17 }
18
19 for(int m=0;m<8;m++){//深度回溯,递归算法
20 if(check(i,m)){//检查皇后摆放是否合适
21 arry[i][m]=1;
22 findQueen(i+1);
23 arry[i][m]=0;//清零,以免回溯的时候出现脏数据
24 }
25 }
26 }
27
28 public static boolean check(int k,int j){//判断节点是否合适
29 for(int i=0;i<8;i++){//检查行列冲突
30 if(arry[i][j]==1){
31 return false;
32 }
33 }
34 for(int i=k-1,m=j-1; i>=0 && m>=0; i--,m--){//检查左对角线
35 if(arry[i][m]==1){
36 return false;
37 }
38 }
39 for(int i=k-1,m=j+1; i>=0 && m<=7; i--,m++){//检查右对角线
40 if(arry[i][m]==1){
41 return false;
42 }
43 }
44 return true;
45 }
46
47 public static void print(){//打印结果
48 System.out.print("方案"+map+":"+"
");
49 for(int i=0;i<8;i++){
50 for(int m=0;m<8;m++){
51 if(arry[i][m]==1){
52 //System.out.print("皇后"+(i+1)+"在第"+i+"行,第"+m+"列 ");
53 System.out.print("o ");
54 }
55 else{
56 System.out.print("+ ");
57 }
58 }
59 System.out.println();
60 }
61 System.out.println();
62 }
链接:https://www.jianshu.com/p/65c8c60b83b8