N皇后问题回溯法解法:Java代码实现
public class Solution {
private int[] rows;
private int[] hills;
private int[] dales;
private int[] queens;
private int n;
private List<List
public List<List<String>> solveNQueens(int n) {
this.n = n;
rows = new int[n];
hills = new int[2 * n - 1];
dales = new int[2 * n - 1];
queens = new int[n];
Arrays.fill(rows, 0);
Arrays.fill(hills, 0);
Arrays.fill(dales, 0);
Arrays.fill(queens, -1);
backtrack(0);
return res;
}
private void backtrack(int row) {
if (row == n) {
res.add(generateBoard());
return;
}
for (int col = 0; col < n; col++) {
if (isNotUnderAttack(row, col)) {
placeQueen(row, col);
backtrack(row + 1);
removeQueen(row, col);
}
}
}
private boolean isNotUnderAttack(int row, int col) {
return rows[col] + hills[row - col + n - 1] + dales[row + col] == 0;
}
private void placeQueen(int row, int col) {
queens[row] = col;
rows[col] = 1;
hills[row - col + n - 1] = 1;
dales[row + col] = 1;
}
private void removeQueen(int row, int col) {
queens[row] = -1;
rows[col] = 0;
hills[row - col + n - 1] = 0;
dales[row + col] = 0;
}
private List<String> generateBoard() {
List<String> board = new ArrayList<>();
for (int i = 0; i < n; i++) {
char[] row = new char[n];
Arrays.fill(row, '.');
row[queens[i]] = 'Q';
board.add(new String(row));
}
return board;
}
}
原文地址: https://www.cveoy.top/t/topic/nW4O 著作权归作者所有。请勿转载和采集!