public class EightQueens {
private static final int BOARD_SIZE = 8;
private int[] queens = new int[BOARD_SIZE];
private int solutionCount = 0;
public static void main(String[] args) {
EightQueens solver = new EightQueens();
solver.solve();
}
public void solve() {
placeQueens(0);
System.out.println("总共有 " + solutionCount + " 种解决方案。");
}
private void placeQueens(int row) {
if (row == BOARD_SIZE) {
printSolution();
solutionCount++;
return;
}
for (int col = 0; col < BOARD_SIZE; col++) {
if (isValidPlacement(row, col)) {
queens[row] = col;
placeQueens(row + 1);
}
}
}
private boolean isValidPlacement(int row, int col) {
for (int prevRow = 0; prevRow < row; prevRow++) {
int prevCol = queens[prevRow];
if (col == prevCol || Math.abs(row - prevRow) == Math.abs(col - prevCol)) {
return false;
}
}
return true;
}
private void printSolution() {
System.out.println("解决方案 " + solutionCount + ":");
for (int row = 0; row < BOARD_SIZE; row++) {
for (int col = 0; col < BOARD_SIZE; col++) {
System.out.print(queens[row] == col ? "Q " : ". ");
}
System.out.println();
}
System.out.println();
}
}