N皇后问题
题解
参考资料讲解 讲的很清晰
a[i]表示在第i - 1行的皇后在第a[i] - 1列
遍历每一列,确定每一行皇后的位置并回溯
注意判断是否冲突的条件 即皇后是否能放在第i行第j列,要看每一列,左斜和右斜是否冲突
class Solution {
public:
bool check(int x, int y, vector<string>& king,vector<int>& a){
for(int i = 0; i < x; i++){
if(king[i][y] == 'Q') return false;
if(i + a[i] == x + y) return false;
if(i - a[i] == x - y) return false;
}
return true;
}
void dfs(int row,int n, vector<string>& king,vector<int>& a, vector<vector<string>>& ans){
if(row == n){
ans.push_back(king);
return;
}
for(int i = 0; i < n; i++){
if(check(row,i,king,a)){
a[row] = i;
king[row][i] = 'Q';
dfs(row + 1,n,king,a,ans);
king[row][i] = ('.');
a[row] = 0;
}
}
}
vector<vector<string>> solveNQueens(int n) {
vector<vector<string>> ans;
vector<int> a(n);
vector<string> king(n,string(n,'.'));
dfs(0,n,king,a,ans);
return ans;
}
};