请用java实现八皇后问题
时间: 2023-11-28 08:05:24 浏览: 75
好的,以下是用Java实现八皇后问题的代码:
```java
public class EightQueens {
private static final int BOARD_SIZE = 8;
private static final int[] QUEENS = new int[BOARD_SIZE];
public static void main(String[] args) {
solveQueensProblem(0);
}
private static void solveQueensProblem(int row) {
if (row == BOARD_SIZE) {
printQueens();
return;
}
for (int col = 0; col < BOARD_SIZE; col++) {
if (canPlaceQueen(row, col)) {
QUEENS[row] = col;
solveQueensProblem(row + 1);
}
}
}
private static boolean canPlaceQueen(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() {
System.out.println("One solution found:");
for (int i = 0; i < BOARD_SIZE; i++) {
for (int j = 0; j < BOARD_SIZE; j++) {
if (QUEENS[i] == j) {
System.out.print("Q ");
} else {
System.out.print(". ");
}
}
System.out.println();
}
System.out.println();
}
}
```
解释一下代码:
这个程序的基本思想是递归。我们从第一行开始,一行一行地放置皇后,每次放置时,我们会检查当前位置是否会导致任何冲突,如果没有,则继续到下一行放置。
canPlaceQueen() 方法用于检查当前的位置是否已经被任何其他皇后攻击到。具体来说,我们检查同一列是否有其他皇后。同时,我们还检查对角线是否有皇后,这可以通过检查行列差的绝对值是否相等来实现。
printQueens() 方法用于将一个解(即一组皇后的位置)输出到标准输出中。在这个方法中,我们打印一个棋盘,其中皇后用 "Q" 表示,没有皇后的位置用 "." 表示。
希望这段代码对你有所帮助。如果您有任何问题,请随时问我!
阅读全文