class Solution {
private:
vector<vector<string>> res;
vector<bool> col,dia1,dia2;
void putQueen(int n,int index,vector<int>& row){
if(index == n){
//将row中的信息转化为string并压入res
res.push_back(rowToString(n,row));
return;
}
//尝试将第index行的皇后摆放在i列的位置
for(int i=0;i<n;i++){
//剪枝,竖向和斜向都不能有其它皇后
if(!col[i] && !dia1[index-i+n-1] && !dia2[index+i]){
row.push_back(i);
col[i] = true;
dia1[index-i+n-1] = true;
dia2[index+i] = true;
putQueen(n,index+1,row);
col[i] = false;
dia1[index-i+n-1] = false;
dia2[index+i] = false;
row.pop_back();
}
}
return;
}
vector<string> rowToString(int n,vector<int>& row){
vector<string> board(n,string(n,'.'));
for(int i=0;i<n;i++){
board[i][row[i]] = 'Q';
}
return board;
}
public:
vector<vector<string>> solveNQueens(int n) {
res.clear();
col = vector<bool>(n,false);
dia1 = vector<bool>(2*n-1,false);//左对角线
dia2 = vector<bool>(2*n-1,false);//右对角线
vector<int> row;
putQueen(n,0,row);
return res;
}
};