使用java实现八皇后问题
时间: 2023-02-25 18:13:54 浏览: 115
JAVA实现的八皇后问题
八皇后问题是一个经典的棋盘问题,要求在 8×8 的国际象棋棋盘上放置 8 个皇后,使得它们不互相攻击,即任意两个皇后都不在同一行、同一列或同一斜线上。
使用 Java 实现八皇后问题,可以使用回溯算法。在每一步,程序在当前列选择一个可以放置皇后的行,如果找到了一组合法解,就打印出来,否则回溯到上一步继续寻找。
以下是一组简单的 Java 代码实现:
```
public class Queen8 {
int[] result = new int[8]; // 全局成员,下标表示行,值表示 queen 存储在哪一列
public void cal8queens(int row) {
if (row == 8) { // 8 个棋子都放置好了,打印结果
printQueens(result);
return;
}
for (int column = 0; column < 8; ++column) {
if (isOk(row, column)) {
result[row] = column;
cal8queens(row+1);
}
}
}
private boolean isOk(int row, int column) {
int leftup = column - 1, rightup = column + 1;
for (int i = row-1; i >= 0; --i) { // 逐行往上考虑每一行
if (result[i] == column) return false; // 第 i 行的 column 列有棋子吗?
if (leftup >= 0) { // 考虑左上对角线:第 i 行 leftup 列有棋子吗?
if (result[i] == leftup) return false;
}
if (rightup < 8) { // 考虑右上对角线:第 i 行 rightup 列有棋子吗
阅读全文