class Solution {
public:
vector<vector<string>> res;
vector<string> board;
bool col[10];
bool flag1[20], flag2[20];
int n;
void dfs(int i){
if(i == n){
res.push_back(board);
return;
}
for(int j = 0; j < n; ++j){
if(!col[j] && !flag1[i + j] && !flag2[i - j + n]){
col[j] = flag1[i + j] = flag2[i - j + n] = true; //第j列、左右对角线都没放过则放
board[i][j] = 'Q';
dfs(i + 1);
col[j] = flag1[i + j] = flag2[i - j + n] = false; //回溯
board[i][j] = '.';
}
}
}
vector<vector<string>> solveNQueens(int _n) {
n = _n;
board.resize(n, string(n, '.'));
dfs(0);
return res;
}
};
LeetCode 51. N 皇后
最新推荐文章于 2024-08-08 15:12:59 发布