class Solution {
public:
vector<vector<string>> ret;
int size;
vector<string> temp;
set<pair<int, int>> s;
pair<int, int> p[2]{
{-1, 1},
{-1, -1}};
void dfs(int cur) {
if (cur == size) {
ret.emplace_back(temp);
return;
}
for (int j = 0; j < size; j++) {
temp[cur][j] = 'Q';
s.insert(make_pair(cur, j));
bool flag = true;
// 判断当前放置的皇后是否与之前放置的皇后发生冲突
for (int row = 0; row < cur && flag; row++)
if (s.find(make_pair(row, j)) != s.end())
flag = false;
int row = cur, col = j;
while (row + p[0].first >= 0 && row + p[0].first < size && col + p[0].second >= 0 &&
col + p[0].second < size && flag)
if (s.find(make_pair(row += p[0].first, col += p[0].second)) != s.end())
flag = false;
row = cur, col = j;
while (row + p[1].first >= 0 && row + p[1].first < size && col + p[1].second >= 0 &&
col + p[1].second < size && flag)
if (s.find(make_pair(row += p[1].first, col += p[1].second)) != s.end())
flag = false;
if (flag)
dfs(cur + 1);
s.erase(make_pair(cur, j));
temp[cur][j] = '.';
}
}
vector<vector<string>> solveNQueens(int n) {
size = n;
temp.resize(n);
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
temp[i] += ".";
dfs(0);
return ret;
}
};
面试题 08.12. 八皇后
最新推荐文章于 2021-02-20 19:02:48 发布