Week 06 - Leetcode 51 - 60
+ DFSclass Solution {
public:
int n;
vector<vector<string>> res;
vector<string> path;
vector<bool> col, dg, udg;
public:
vector<vector<string>> solveNQueens(int n) {
this->n = n;
// DFS - 回溯 + 剪枝
// 按行枚举 用bool数组记录 列 主斜线 副斜线
col = vector<bool>(n);
dg = vector<bool>(2 * n);
udg = vector<bool>(2 * n);
string p(n, '.');
path = vector<string>(n, p);
dfs(0);
//cout << p << endl;
return res;
}
void dfs(int u)
{
if(u == n)
res.push_back(path);
else
{
for(int i = 0; i < n; i++)
{
if(!col[i] && !dg[i + u] && !udg[n + i - u])
{
col[i] = dg[i + u] = udg[n + i - u] = true;
path[u][i] = 'Q';
dfs(u + 1);
col[i] = dg[i + u] = udg[n + i - u] = false;
path[u][i] = '.';
}
}
}
}
};

Last updated