class Solution {
public:
vector<vector<string>> solveNQueens(int n) {
vector<string> board(n, string(n, '.'));
backtrack(board,0);
return res;
}
private:
vector<vector<string>>res;
void backtrack(vector<string>& board,int row){
if(row==board.size()){
res.push_back(board);
return ;
}
int n=board[row].size();
for(int con=0;con<n;con++){
if(!isvalid(board,row,con)){
continue;
}
board[row][con]='Q';
backtrack(board,row+1);
board[row][con]='.';
}
}
bool isvalid(const vector<string>& board,int row,int con){
int n=board.size();
//检查列之间有没有冲突
for(int i=0;i<row;i++){
if(board[i][con]=='Q')
return false;
}
//检查左对角线是否有冲突
for(int i=row-1,j=con-1;i>=0&&j>=0;i--,j--){
if(board[i][j]=='Q')
return false;
}
//检查右对角线是否有冲突
for(int i=row-1,j=con+1;i>=0&&j<n;i--,j++){
if(board[i][j]=='Q')
return false;
}
return true;
}
};