使用java,包含Queen()函数的完整代码
时间: 2023-12-14 09:39:52 浏览: 26
以下是一个简单的Java程序,用于求解N皇后问题:
```
public class NQueens {
private int[] queens;
private int n;
public NQueens(int n) {
this.n = n;
queens = new int[n];
}
public void solve() {
if (placeQueen(0)) {
printQueens();
} else {
System.out.println("No solution exists.");
}
}
private boolean placeQueen(int row) {
if (row == n) {
return true;
}
for (int col = 0; col < n; col++) {
queens[row] = col;
if (isValid(row, col) && 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 row = 0; row < n; row++) {
for (int col = 0; col < n; col++) {
if (queens[row] == col) {
System.out.print("Q ");
} else {
System.out.print(". ");
}
}
System.out.println();
}
}
public static void main(String[] args) {
NQueens nQueens = new NQueens(8);
nQueens.solve();
}
}
```
在上面的代码中,我们定义了一个`NQueens`类,它接受一个整数`n`作为参数,表示要解决的N皇后问题的规模。我们在类中定义了一个`queens`数组,用于保存每行皇后所在的列数。
`solve()`方法是解决问题的核心方法。它调用`placeQueen()`方法来逐行放置皇后。如果在最后一行放置成功,就调用`printQueens()`方法打印结果。否则,就返回"No solution exists"。
`placeQueen()`方法从左到右逐个检查列,如果当前列可以放置皇后,就继续递归到下一行。否则,就回溯到上一行继续检查。
`isValid()`方法用于检查当前位置是否可以放置皇后。它使用了三个条件来判断:列是否冲突、左上到右下的对角线是否冲突、右上到左下的对角线是否冲突。
`printQueens()`方法用于将皇后的位置打印出来。其中,Q表示皇后,.表示空格。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)