1 public class EightQueenDemo {
2
3 public static int count = 0;
4 public boolean check(int array[][], int num, int i, int j) {
5 for(int k = 0; k < num; k++) {
6 if(array[i][k] == 1)
7 return false;
8 if(array[k][j] == 1)
9 return false;
10 }
11 for(int s = i - 1, t = j - 1; s >= 0 && t >= 0; s--, t--) {
12 if(array[s][t] == 1)
13 return false;
14 }
15 for(int s = i - 1, t = j + 1; s >= 0 && t < num; s--, t++) {
16 if(array[s][t] == 1)
17 return false;
18 }
19 return true;
20 }
21
22 private void printQueen(int[][] array, int num) {
23 System.out.println(num + "皇后的一种解法:");
24 for(int i = 0; i < num; i++) {
25 for(int j = 0; j < num; j++) {
26 System.out.print(array[i][j] + " ");
27 }
28 System.out.println();
29 }
30 }
31
32 public void find(int[][] array, int num, int row) {
33 if(row > 7) {
34 count++;
35 printQueen(array, num);
36 return;
37 }
38 for(int col = 0; col < num; col++) {
39 if(check(array, num, row, col)) {
40 array[row][col] = 1;
41 find(array, num, row + 1);
42 array[row][col] = 0;//一种解法找完后,将本位置重新置为0
43 }
44 }
45 }
46
47 public static void main(String[] args) {
48 int num = 8;
49 int[][] array = new int[num][num];
50 EightQueenDemo eqd = new EightQueenDemo();
51 eqd.find(array, num, 0);
52 System.out.println("八皇后一共有:" + count + "种解法");
53 }
54 }