用java写出8皇后
时间: 2024-08-16 22:00:40 浏览: 44
在国际象棋的棋盘上放置8个皇后,要求任意两个皇后之间都不在同一行、同一列,以及对角线上。这是一个经典的回溯算法问题,可以用递归的方式来解决。以下是Java代码实现的一个简单版本:
```java
public class EightQueens {
private static final int BOARD_SIZE = 8;
private boolean[] rows; // 表示每一行是否有皇后
private boolean[][] cols; // 表示每一列是否有皇后
private boolean[][] diag; // 右上到左下的对角线是否有皇后
private boolean[][] antiDiag; // 右下到左上的对角线是否有皇后
public void solve(int row) {
if (row == BOARD_SIZE) { // 如果填满了一行,找到了一个解
printSolution();
return;
}
for (int col = 0; col < BOARD_SIZE; col++) {
if (!rows[row] && !cols[col] && !diag[row + col] && !antiDiag[row - col]) { // 检查当前位置是否可行
rows[row] = true;
cols[col] = true;
diag[row + col] = true;
antiDiag[row - col] = true;
solve(row + 1); // 继续向下一行搜索
rows[row] = false;
cols[col] = false;
diag[row + col] = false;
antiDiag[row - col] = false; // 回溯
}
}
}
private void printSolution() {
for (int i = 0; i < BOARD_SIZE; i++) {
for (int j = 0; j < BOARD_SIZE; j++) {
System.out.print(cols[j] ? "Q " : ".");
System.out.print(antiDiag[i - j] ? "Q " : ".");
}
System.out.println();
}
}
public static void main(String[] args) {
EightQueens eightQueens = new EightQueens();
eightQueens.solve(0);
}
}
```
在这个程序中,我们维护了四个布尔矩阵,分别表示当前行、列、对角线和反向对角线的状态。当找到一个解决方案时,会打印出棋盘布局。
阅读全文