51、N 皇后
51.1 题目
51.2 分析
51.3 代码
class Solution {
public:
void dfs(vector<vector<string>>& ans,vector<int>& curr, int n, int row,unordered_multiset<int>& column,unordered_multiset<int>& slash1,unordered_multiset<int>& slash2){
if(row==n){
vector<string> board=getStringBoard(curr,n);
ans.push_back(board);
return;
}
for(int i=0;i<n;i++){
if(column.find(i)!=column.end()) {continue;}
if(slash1.find(row+i)!=slash1.end()){continue;}
if(slash2.find(row-i)!=slash2.end()){continue;}
column.insert(i);
slash1.insert(row+i);
slash2.insert(row-i);
curr[row]=i;
dfs(ans,curr,n,row+1,column,slash1,slash2);
curr[row]=-1;
column.erase(i);
slash1.erase(row+i);
slash2.erase(row-i);
}
}
vector<string> getStringBoard(vector<int>& curr,int n){
vector<string> board;
for(int i=0;i<n;i++){
string row=string(n,'.');
row[curr[i]]='Q';
board.push_back(row);
}
return board;
}
vector<vector<string>> solveNQueens(int n) {
unordered_multiset<int> column;
unordered_multiset<int> slash1;
unordered_multiset<int> slash2;
vector<int> curr(n,-1);
vector<vector<string>> ans;
dfs(ans, curr, n,0, column,slash1,slash2);
return ans;
}
};