当然,下面是一个使用Java实现的八皇后问题的示例代码。八皇后问题是一个经典的回溯算法问题,要求在一个8x8的棋盘上放置八个皇后,使得它们互不攻击。皇后能攻击同一行、同一列以及两个对角线上的其他皇后。
public class EightQueens {
private static final int N = 8; // 棋盘大小
private int[] queens = new int[N]; // 数组记录每行皇后的列位置
public void solveNQueens() {
placeQueen(0);
}
private void placeQueen(int row) {
if (row == N) { // 所有皇后都放置成功
printSolution();
return;
}
for (int col = 0; col < N; col++) {
if (isSafe(row, col)) {
queens[row] = col; // 放置皇后
placeQueen(row + 1); // 递归放置下一个皇后
// 回溯,撤销当前皇后的放置
}
}
}
private boolean isSafe(int row, int col) {
// 检查列上是否有皇后冲突
for (int i = 0; i < row; i++) {
if (queens[i] == col) {
return false;
}
}
// 检查左上方对角线是否有皇后冲突
for (int i = row - 1, j = col - 1; i >= 0 && j >= 0; i--, j--) {
if (queens[i] == j) {
return false;
}
}
// 检查右上方对角线是否有皇后冲突
for (int i = row - 1, j = col + 1; i >= 0 && j < N; i--, j++) {
if (queens[i] == j) {
return false;
}
}
return true;
}
private void printSolution() {
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();
}
System.out.println("---");
}
public static void main(String[] args) {
EightQueens eq = new EightQueens();
eq.solveNQueens();
}
}
这段代码首先定义了一个`EightQueens`类,其中包含`solveNQueens`方法来启动解决过程,`placeQueen`方法用于递归地尝试在每一行放置皇后,`isSafe`方法用于检查在给定的行和列放置皇后是否安全,以及`printSolution`方法来打印一种解决方案。
请注意,由于八皇后问题有多个解,这段代码将输出所有可能的解决方案。每个解决方案之间由一行`---`分隔。