Java 八皇后问题解决方案 - 回溯算法实现
八皇后问题是一个经典的回溯算法问题,可以使用 Java 编写解决方案。
-
定义一个 8*8 的二维数组来表示棋盘,初始化为 0。
-
从第一行开始,每行放一个皇后。
-
对于每个皇后,从第一列开始,尝试放置。如果放置成功(即不会与之前的皇后冲突),则继续放下一行的皇后。
-
如果当前行无法放置皇后,则回溯到上一行,重新尝试放置皇后。
-
当最后一行的皇后放置成功后,输出结果。
以下是 Java 代码实现:
public class EightQueens {
private static final int SIZE = 8;
private int[][] board = new int[SIZE][SIZE];
public void solve() {
if (solve(0)) {
printBoard();
} else {
System.out.println('No solution found!');
}
}
private boolean solve(int row) {
if (row == SIZE) {
return true;
}
for (int col = 0; col < SIZE; col++) {
if (isValid(row, col)) {
board[row][col] = 1;
if (solve(row + 1)) {
return true;
}
board[row][col] = 0;
}
}
return false;
}
private boolean isValid(int row, int col) {
for (int i = 0; i < row; i++) {
if (board[i][col] == 1) {
return false;
}
}
for (int i = row - 1, j = col - 1; i >= 0 && j >= 0; i--, j--) {
if (board[i][j] == 1) {
return false;
}
}
for (int i = row - 1, j = col + 1; i >= 0 && j < SIZE; i--, j++) {
if (board[i][j] == 1) {
return false;
}
}
return true;
}
private void printBoard() {
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
System.out.print(board[i][j] + ' ');
}
System.out.println();
}
}
public static void main(String[] args) {
EightQueens eq = new EightQueens();
eq.solve();
}
}
该代码使用了递归回溯算法来解决八皇后问题。isValid() 方法用来检查是否满足皇后的规则。printBoard() 方法用来输出结果。main() 方法创建一个 EightQueens 对象并调用 solve() 方法来解决八皇后问题。
原文地址: https://www.cveoy.top/t/topic/mVNb 著作权归作者所有。请勿转载和采集!