P51 N皇后
这道题是一道比较难的dfs题,主要是斜对角线的判断。

树形结构, 在已经不满足条件的时候剪枝,会节省大部分时间。

对角线的判断

class Solution {
vector<vector<string>> ans;
vector<string> path;
vector<bool> a,b,c;
public:
vector<vector<string>> solveNQueens(int n) {
a = vector<bool>(n);
b = c = vector<bool>(2*n);
path = vector<string>(n,string(n,'.'));
dfs(0,n);
return ans;
}
void dfs(int x,int n){
if(x == n){
ans.push_back(path);
return ;
}
for(int i=0;i<n;i++){
if(a[i] || b[i-x+n] || c[i+x]) continue;
a[i] = b[i-x+n] = c[i+x] = true;
path[x][i] = 'Q';
dfs(x+1 , n);
path[x][i] = '.';
a[i] = b[i-x+n] = c[i+x] = false;
}
}
};
明天见!OvO