java实现八皇后问题
时间: 2023-10-20 07:16:25 浏览: 75
八皇后问题是一个经典的回溯算法问题,以下是 Java 实现代码:
```java
public class EightQueensProblem {
private static final int BOARD_SIZE = 8;
private static int[] positions = new int[BOARD_SIZE];
private static int solutionCount = 0;
public static void main(String[] args) {
solve(0);
System.out.println("Total solutions: " + solutionCount);
}
private static void solve(int row) {
if (row == BOARD_SIZE) {
printSolution();
solutionCount++;
} else {
for (int col = 0; col < BOARD_SIZE; col++) {
if (isValidPosition(row, col)) {
positions[row] = col;
solve(row + 1);
}
}
}
}
private static boolean isValidPosition(int row, int col) {
for (int i = 0; i < row; i++) {
if (positions[i] == col || positions[i] - i == col - row || positions[i] + i == col + row) {
return false;
}
}
return true;
}
private static void printSolution() {
System.out.print("Solution " + solutionCount + ": ");
for (int i = 0; i < BOARD_SIZE; i++) {
System.out.print("(" + i + ", " + positions[i] + ") ");
}
System.out.println();
}
}
```
在该实现中,我们使用了一个一维数组 `positions` 来存储每行皇后的列位置。`isValidPosition` 方法用来判断当前行和列位置是否合法,即不会被已经放置的皇后攻击到。如果当前位置合法,则将该位置存储到 `positions` 数组中,并递归调用 `solve` 方法,继续处理下一行。当递归到最后一行时,说明已经找到了一个可行解,将其打印出来并增加计数器 `solutionCount`。最终输出解的总数。
阅读全文