写一个八皇后java
时间: 2024-10-18 12:18:50 浏览: 23
八皇后问题是一个经典的回溯算法案例,它要求在一个8x8的棋盘上放置八个皇后,使得任意两个皇后都不在同一行、同一列,以及同一条对角线上。以下是简单的Java代码实现八皇后问题:
```java
public class EightQueens {
private static final int BOARD_SIZE = 8;
private boolean[] board;
public void solve() {
board = new boolean[BOARD_SIZE];
printSolution(0);
}
private void printSolution(int row) {
if (row == BOARD_SIZE) {
for (int i = 0; i < BOARD_SIZE; i++) {
System.out.print(board[i] ? "Q" : ".");
}
System.out.println();
return;
}
for (int col = 0; col < BOARD_SIZE; col++) {
if (isValid(row, col)) {
board[row] = true;
printSolution(row + 1);
board[row] = false; // 回溯:尝试下一个位置
}
}
}
private boolean isValid(int row, int col) {
// 检查同行、同列和左上到右下的对角线是否有皇后
for (int i = 0; i < row; i++) {
if (board[i] || (row - i == col + BOARD_SIZE - 1)) {
return false;
}
}
return true;
}
public static void main(String[] args) {
EightQueens eightQueens = new EightQueens();
eightQueens.solve();
}
}
```
这个程序首先初始化一个布尔数组表示棋盘,然后递归地尝试在每一行放置皇后,并检查当前位置是否合法。如果合法,就继续向下一行,如果不合法,则回溯到前一位置并尝试其他列。当所有皇后都放好后,打印出解决方案。
阅读全文