public class EightQueenDemo { public static int count = 0; public boolean check(int array[][], int num, int i, int j) { //每行每列都只有一个棋子 for(int k = 0; k < num; k++) { if(array[i][k] == 1) return false; if(array[k][j] == 1) return false; } /*把i和j的值分别置为比当前棋子位置的值少一,即为左上角一格, i >= 0 && j >= 0;控制i和j在棋盘范围内, --i, --j;向左上角移动 */ for(int s = i - 1, t = j - 1; s >= 0 && t >= 0; s--, t--) { if(array[s][t] == 1) return false; } /*i的值为当前棋子的行值减一,j的值为当前棋子的列值加一,即为右上角一格, i != N && j != N; 控制i和j在棋盘范围内, --i, ++j;向右上角移动 */ for(int s = i - 1, t = j + 1; s >= 0 && t < num; s--, t++) { if(array[s][t] == 1) return false; } return true; } private void printQueen(int[][] array, int num) { System.out.println(num + "皇后的一种解法:"); for(int i = 0; i < num; i++) { for(int j = 0; j < num; j++) { System.out.print(array[i][j] + " "); } System.out.println(); } } public void find(int[][] array, int num, int row) { if(row > 7) { count++; printQueen(array, num); return; } for(int col = 0; col < num; col++) { if(check(array, num, row, col)) { array[row][col] = 1; find(array, num, row + 1); array[row][col] = 0;//一种解法找完后,将本位置重新置为0 } } } public static void main(String[] args) { int num = 8; int[][] array = new int[num][num]; EightQueenDemo eqd = new EightQueenDemo(); eqd.find(array, num, 0); System.out.println("八皇后一共有:" + count + "种解法"); }}
来源:https://www.cnblogs.com/zq010539/p/11853047.html