LeetCode Day40 Queen N
阿新 • • 發佈:2018-12-03
class Solution {
public:
vector<vector<string>> solveNQueens(int n) {
vector<vector<string>> res;
vector<int> pos(n,-1);
DFS(pos,0,res);
return res;
}
void DFS(vector<int> &pos,int row,vector<vector<string>> & res){
int n=pos.size();
if(row==n){
vector<string> out(n,string(n,'.'));
for(int i=0;i<n;i++){
out[i][pos[i]]='Q';
}
res.push_back(out);
}
else{
for(int col=0;col<n;col++){
int flag=1;
for(int i=0;i<row;i++){//判斷有沒有列或對角線衝突 判斷對角線,即判斷當前行減去第i行的值和當前列減去第i行皇后所在列的值是否相等
if(pos[i]==col||abs(row-i)==abs(col-pos[i])) flag=0;
}
if(flag){
pos[row]=col;
DFS(pos,row+1,res);
pos[ row]=-1;
}
}
}
}
};