class Solution {
public:
bool isValid (vector<string> &board, int r, int c) {
for (int i=0; i<board.size(); i++) {
if (i!=r && board[i][c]=='Q') return false;
if (i!=c && board[r][i]=='Q') return false;
}
for (int i=0; i<board.size(); i++) {
for (int j=0; j<board.size(); j++) {
if (i!=r && j!=c) {
if (abs(i-r)==abs(j-c) && board[i][j]=='Q') return false;
}
}
}
return true;
}
bool dfs(int r, int n, vector<vector<string> > &res, vector<string> &cur) {
if (r==n) {
res.push_back(cur);
return true;
}
for (int c=0; c<n; c++) {
cur[r][c]='Q';
if (isValid(cur, r, c)) {
dfs (r+1, n, res, cur);
}
cur[r][c]='.';
}
return false;
}
vector<vector<string> > solveNQueens(int n) {
string p(n,'.');
vector<string> cur(n, p);
vector<vector<string> > res;
dfs(0,n,res,cur);
return res;
}
};
II:
class Solution {
public:
bool isValid (vector<string> &board, int r, int c) {
for (int i=0; i<board.size(); i++) {
if (i!=r && board[i][c]=='Q') return false;
if (i!=c && board[r][i]=='Q') return false;
}
for (int i=0; i<board.size(); i++) {
for (int j=0; j<board.size(); j++) {
if (i!=r && j!=c) {
if (abs(i-r)==abs(j-c) && board[i][j]=='Q') return false;
}
}
}
return true;
}
bool dfs(int r, int n, int &res, vector<string> &cur) {
if (r==n) {
res++;
return true;
}
for (int c=0; c<n; c++) {
cur[r][c]='Q';
if (isValid(cur, r, c)) {
dfs (r+1, n, res, cur);
}
cur[r][c]='.';
}
return false;
}
int totalNQueens(int n) {
int res=0;
string p(n,'.');
vector<string> cur(n, p);
dfs(0,n,res,cur);
return res;
}
};
3343

被折叠的 条评论
为什么被折叠?



