java求解皇后问题全部代码
时间: 2024-06-24 08:00:47 浏览: 9
Java求解N皇后问题通常使用回溯算法,这是一种典型的解决排列问题的方法。以下是一个简单的Java代码实现:
```java
public class NQueens {
private static final int N = 8; //皇后数量,你可以根据需要修改
// 假设皇后已经放置在了列col,行row上
private boolean solve(int col, int row) {
if (col == N) { // 当所有列都放置好后,返回true表示成功
return true;
}
// 尝试将皇后放在当前列
for (int i = row; i < N; i++) {
// 检查同一行和对角线是否有冲突
if (!isSafe(col, i)) {
continue; // 如果冲突,跳到下一个位置
}
// 放置皇后并继续在下一行尝试
if (solve(col + 1, i)) {
placeQueen(row, col, board); // 将皇后放入棋盘
return true;
}
}
// 回溯:如果当前列放置不成功,撤回上一步
return false;
}
private boolean isSafe(int col, int row) {
// 检查同一行和左上-右下的对角线
for (int i = 0; i < row; i++) {
if (board[i] == col || Math.abs(board[i] - col) == row - i) {
return false;
}
}
return true;
}
private void placeQueen(int row, int col, int[][] board) {
board[row][col] = col; // 在棋盘上放置皇后
}
public static void main(String[] args) {
int[][] board = new int[N][N];
if (solve(0, 0, board)) {
printBoard(board);
} else {
System.out.println("No solution exists for " + N + " queens.");
}
}
private static void printBoard(int[][] board) {
for (int[] row : board) {
for (int cell : row) {
System.out.print(cell + " ");
}
System.out.println();
}
}
}
```