java回溯法求四皇后问题
时间: 2023-11-20 09:58:30 浏览: 107
以下是Java回溯法求解四皇后问题的代码和注释:
```java
public class NQueens {
private static final int N = 4; // 棋盘大小
private static int[] queens = new int[N]; // 皇后所在列的位置
public static void main(String[] args) {
nQueens(0);
}
private static void nQueens(int row) {
if (row == N) { // 找到一组解
printQueens();
return;
}
for (int col = 0; col < N; col++) { // 遍历每一列
if (isValid(row, col)) { // 判断该位置是否可以放置皇后
queens[row] = col; // 放置皇后
nQueens(row + 1); // 继续放下一行的皇后
}
}
}
private static boolean isValid(int row, int col) {
for (int i = 0; i < row; i++) { // 遍历之前的每一行
if (queens[i] == col || // 判断是否在同一列
queens[i] - i == col - row || // 判断是否在同一条左上-右下的斜线
queens[i] + i == col + row) { // 判断是否在同一条左下-右上的斜线
return false;
}
}
return true;
}
private static void printQueens() {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (queens[i] == j) {
System.out.print("Q ");
} else {
System.out.print(". ");
}
}
System.out.println();
}
System.out.println();
}
}
```
阅读全文