N皇后问题的关键在与状态的记录,用一个全局数组/集合表示col,主对角线和反对角线是否不能填。
class Solution {
public:
vector<vector<string>> res;
unordered_set<int> cols;
unordered_set<int> pie;
unordered_set<int> na;
vector<vector<string>> solveNQueens(int n) {
vector<string> board(n, string(n, '.'));
dfs(0,board,n);
return res;
}
void dfs(int row,vector<string> board,int n){
if(row==n){
res.push_back(board);
}
for(int i=0;i<n;i++){
if(cols.find(i)==cols.end()&&pie.find(i+row)==pie.end()&&na.find(row-i)==na.end()){
board[row][i] = 'Q';
cols.insert(i);
pie.insert(row+i);
na.insert(row-i);
dfs(row+1,board,n);
cols.erase(i);
pie.erase(row+i);
na.erase(row-i);
board[row][i] = '.';
}
}
}
};
只是将输出方案改为输出方案数。