题目链接:https://leetcode-cn.com/problems/eight-queens-lcci/
题目如下:
class Solution {
public:
vector<vector<string>> solveNQueens(int n) {
vector<string> board(n,string(n,'.'));
backtracking(board,0,n);
return res;
}
void backtracking(vector<string>& board,int startRow,int n){
if(startRow==n){
res.push_back(board);
return;
}
for(int i=0;i<n;i++){
if(isValid(board,startRow,i,n)){
board[startRow][i]='Q';
backtracking(board,startRow+1,n);
board[startRow][i]='.';
}
}
}
bool isValid(vector<string>& board,int row,int col,int n){
//列
for(int i=0;i<col;i++){
if(board[row][i]=='Q') return false;
}
//行
for(int i=0;i<row;i++){
if(board[i][col]=='Q') return false;
}
//正斜
for(int i=row-1,j=col-1;i>=0&&j>=0;i--,j--){
if(board[i][j]=='Q') return false;
}
//负斜
for(int i=row-1,j=col+1;i>=0&&j<n;i--,j++){
if(board[i][j]=='Q') return false;
}
return true;
}
private:
vector<vector<string>> res;
};