java的八皇后问题
时间: 2023-12-31 19:23:56 浏览: 113
Java 八皇后问题
3星 · 编辑精心推荐
八皇后问题是一个经典的回溯算法问题,目标是在一个8x8的棋盘上放置8个皇后,使得每个皇后都不会互相攻击。下面是一个Java的八皇后问题的解决方案:
```java
public class EightQueens {
private static final int SIZE = 8; // 棋盘大小
private static int[] queens = new int[SIZE]; // 皇后的位置
public static void main(String[] args) {
solve(0); // 从第一行开始放置皇后
}
private static void solve(int row) {
if (row == SIZE) { // 所有皇后都已放置好
printQueens();
return;
}
for (int col = 0; col < SIZE; col++) {
if (isValid(row, col)) { // 判断当前位置是否可以放置皇后
queens[row] = col; // 放置皇后
solve(row + 1); // 递归放置下一行的皇后
}
}
}
private static boolean isValid(int row, int col) {
for (int i = 0; i < row; i++) {
if (queens[i] == col || queens[i] - col == i - row || queens[i] - col == row - i) {
return false; // 判断是否与之前的皇后冲突
}
}
return true;
}
private static void printQueens() {
for (int row = 0; row < SIZE; row++) {
for (int col = 0; col < SIZE; col++) {
if (queens[row] == col) {
System.out.print("Q ");
} else {
System.out.print(". ");
}
}
System.out.println();
}
System.out.println();
}
}
```
这段代码使用了递归的回溯算法来解决八皇后问题。它通过遍历每一行的每一列,判断当前位置是否可以放置皇后,如果可以则继续递归放置下一行的皇后,直到所有皇后都放置好。在判断当前位置是否可以放置皇后时,需要检查与之前已放置的皇后是否有冲突。
阅读全文