java实现八皇后问题
时间: 2023-06-10 15:06:41 浏览: 117
八皇后问题是一个经典的回溯算法问题,下面是一份 Java 实现代码:
```java
public class EightQueens {
private int[] queens; // 皇后所在行的列号
private int n; // 皇后数量
private int count; // 解法数量
public EightQueens(int n) {
this.n = n;
queens = new int[n];
count = 0;
placeQueen(0);
}
// 在第 i 行放置皇后
private void placeQueen(int i) {
if (i == n) {
count++;
printQueens();
return;
}
for (int j = 0; j < n; j++) {
if (isValid(i, j)) {
queens[i] = j;
placeQueen(i + 1);
}
}
}
// 判断第 i 行第 j 列是否可以放置皇后
private boolean isValid(int i, int j) {
for (int k = 0; k < i; k++) {
if (queens[k] == j || Math.abs(i - k) == Math.abs(j - queens[k])) {
return false;
}
}
return true;
}
// 打印解法
private void printQueens() {
System.out.print("Solution " + count + ": ");
for (int i = 0; i < n; i++) {
System.out.print("(" + i + "," + queens[i] + ")");
}
System.out.println();
}
public static void main(String[] args) {
EightQueens eq = new EightQueens(8); // 解八皇后问题
System.out.println("Total solutions: " + eq.count);
}
}
```
该实现中,`placeQueen` 方法递归地在每一行放置皇后,`isValid` 方法判断一个位置是否可以放置皇后,`printQueens` 方法打印解法,`main` 方法创建 `EightQueens` 对象并解决八皇后问题。
阅读全文