java语言实现n皇后问题
时间: 2023-11-29 17:58:31 浏览: 66
以下是Java语言实现n皇后问题的代码,其中n代表皇后的数量:
```java
public class NQueens {
private final int n;
private int[] queens;
public NQueens(int n) {
this.n = n;
queens = new int[n];
}
public void solve() {
if (placeQueen(0)) {
printQueens();
} else {
System.out.println("No solution found");
}
}
private boolean placeQueen(int row) {
if (row == n) {
return true;
}
for (int i = 0; i < n; i++) {
queens[row] = i;
if (isValid(row, i) && placeQueen(row + 1)) {
return true;
}
}
return false;
}
private boolean isValid(int row, int col) {
for (int i = 0; i < row; i++) {
if (queens[i] == col || queens[i] - i == col - row || queens[i] + i == col + row) {
return false;
}
}
return true;
}
private void printQueens() {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (queens[i] == j) {
System.out.print("Q ");
} else {
System.out.print("* ");
}
}
System.out.println();
}
}
public static void main(String[] args) {
NQueens nQueens = new NQueens(8);
nQueens.solve();
}
}
```
在这个实现中,我们使用了一个整数数组来存储每一行的皇后所在的列。在solve()方法中,我们首先调用placeQueen(0)来尝试放置第一个皇后。如果可以放置,我们继续尝试放置下一个皇后;如此反复,直到所有皇后都被放置。如果无法放置任何一个皇后,则返回false。在placeQueen()方法中,我们使用一个循环来尝试放置每一个皇后。在每一次循环中,我们将皇后放置在当前行中的某一列,然后检查它是否与之前的皇后冲突。如果没有冲突,则递归调用placeQueen()方法来尝试放置下一个皇后。如果所有皇后都被成功放置,则返回true。在isValid()方法中,我们检查当前皇后是否与之前的皇后冲突,如果有冲突,则返回false。最后,在printQueens()方法中,我们打印出皇后的位置,其中皇后用“Q”表示,空白格用“*”表示。在main()方法中,我们创建一个NQueens对象,并调用solve()方法来解决n皇后问题。
阅读全文