n皇后问题Java深度优先算法完整代码
时间: 2024-11-23 08:27:44 浏览: 17
n皇后问题是经典的回溯算法问题,在Java中,我们可以用递归的方式来解决。以下是深度优先搜索(DFS)求解n皇后问题的一个简单示例:
```java
public class NQueens {
public static boolean canPlace(int queenCount, int row) {
// 已经放置了queenCount个皇后,检查是否存在冲突
for (int col = 0; col < queenCount; col++) {
if (col == row || Math.abs(row - col) == queenCount - col ||
Math.abs(row + col) == queenCount - col) {
return false;
}
}
return true;
}
public static void printSolutions(int size) {
boolean[][] board = new boolean[size][size];
dfs(board, 0, size);
}
private static void dfs(boolean[][] board, int row, int size) {
// 如果行数到达最后一行,找到一种解决方案
if (row == size) {
printBoard(board);
return;
}
// 对每列尝试放置皇后
for (int col = 0; col < size; col++) {
if (canPlace(row, col)) {
board[row][col] = true;
// 继续在下一行尝试放置
dfs(board, row + 1, size);
// 撤销当前选择,回溯到上一行继续尝试其他列
board[row][col] = false;
}
}
}
private static void printBoard(boolean[][] board) {
for (int[] row : board) {
for (boolean cell : row) {
System.out.print(cell ? "Q " : ".");
}
System.out.println();
}
System.out.println();
}
public static void main(String[] args) {
printSolutions(4); // 示例:寻找4皇后问题的所有解决方案
}
}
```
这个代码首先定义了一个`canPlace`函数,用于检查在给定行放置皇后的可行性。接着,`printSolutions`函数通过递归调用`dfs`来遍历所有可能的皇后布局,并在找到解后打印出来。
运行此程序会输出4皇后问题的解决方案。
阅读全文