1. 题目来源
链接:51. N 皇后
2. 题目解析
前导题:
文字题解看上面,下面这图是自己总结的手绘版…字丑。
时间复杂度:
O
(
n
!
)
O(n!)
O(n!)
空间复杂度:
O
(
n
)
O(n)
O(n)
代码:
class Solution {
public:
int n;
vector<vector<string>> res;
vector<string> path;
vector<bool> col, dg, udg;
vector<vector<string>> solveNQueens(int _n) {
n = _n;
col = vector<bool>(n);
dg = udg = vector<bool>(2 * n);
path = vector<string>(n, string(n, '.'));
dfs(0);
return res;
}
void dfs(int u) {
if (u == n) {
res.push_back(path);
return ;
}
for (int i = 0; i < n; i ++ ) {
if (!col[i] && !dg[i - u + n] && !udg[i + u]) {
col[i] = dg[i - u + n] = udg[i + u] = true;
path[u][i] = 'Q';
dfs(u + 1);
col[i] = dg[i - u + n] = udg[i + u] = false;
path[u][i] = '.';
}
}
}
};