您的位置:首页 > 产品设计 > UI/UE

N-Queens

2014-02-12 02:48 253 查看
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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: