用java写一段八皇后问题的代码
时间: 2024-09-30 18:12:16 浏览: 24
八皇后问题是一个经典的回溯算法示例,目标是在一个8x8的棋盘上放置八个皇后,使得任意两个皇后都不在同一行、同一列,以及斜线上。以下是使用Java实现的一个简单版本:
```java
public class EightQueens {
private static final int BOARD_SIZE = 8;
private boolean[] rows = new boolean[BOARD_SIZE];
private boolean[][] cols = new boolean[BOARD_SIZE][BOARD_SIZE];
private boolean[][] diagonals = new boolean[BOARD_SIZE][BOARD_SIZE];
public void solve() {
placeQueen(0);
}
private void placeQueen(int row) {
if (row == BOARD_SIZE) { // 如果已经放置完所有皇后
printSolution();
return;
}
for (int col = 0; col < BOARD_SIZE; col++) {
if (!isSafe(row, col)) { // 检查当前位置是否安全
continue;
}
rows[row] = true;
cols[row][col] = true;
diagonals[row + col][col] = true;
diagonals[row - 1][col] = true;
placeQueen(row + 1); // 继续尝试下一个位置
rows[row] = false;
cols[row][col] = false;
diagonals[row + col][col] = false;
diagonals[row - col + BOARD_SIZE - 1][col] = false;
}
}
private boolean isSafe(int row, int col) {
return !rows[row] && !cols[row][col] && !diagonals[row][col] && !diagonals[row + col][col];
}
private void printSolution() {
System.out.println("解决方案:");
for (int i = 0; i < BOARD_SIZE; i++) {
for (int j = 0; j < BOARD_SIZE; j++) {
if (rows[i]) {
System.out.print("Q ");
} else {
System.out.print(". ");
}
}
System.out.println();
}
System.out.println();
}
public static void main(String[] args) {
EightQueens queenProblem = new EightQueens();
queenProblem.solve();
}
}
```
在这个代码中,`placeQueen()`函数通过递归尝试在每一行放置皇后,并检查它对其他皇后的位置的影响。`isSafe()`函数用于检查当前位置是否可行。当找到一种解决方案后,`printSolution()`函数会打印出结果。
阅读全文