返回信息流class Solution {
public:
vector<vector<string> > solveNQueens(int n) {
vector<int> pos;
solve(pos, n);
return ret;
}
bool isValid(vector<int> &pos){
int row = pos.size()-1;
for(int i=0; i<row; i++){
if(pos[i]==pos[row] || abs(pos[i]-pos[row])==abs(i-row))
return 0;
}
return 1;
}
void solve(vector<int> &pos, int n){
int row = pos.size();
if(row == n) printQueen(pos);
for(int i=0; i<n; i++){
pos.push_back(i);
if(isValid(pos))
solve(pos, n);
else
pos.pop_back();
}
}
void printQueen(vector<int>& pos){
string s(pos.size(),'.');
vector<string> a(pos.size(), s);
for(int i=0; i<pos.size(); i++){
a[i][pos[i]] = 'Q';
}
ret.push_back(a);
}
private:
vector<vector<string> > ret;
};
这是一条镜像帖。来源:北邮人论坛 / cpp / #86424同步于 2015/4/7
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
皇后问题,求找bug
LoveXY
2015/4/7镜像同步1 回复
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
lz既然你不说为什么你认为不对,那我就不告诉你我觉得该怎么改了
这个函数不对`void solve(vector<int> &pos, int n)`,用伪代码的话应该写成:
```
bool solve(vector<int>& pos, int n) {
if (finished())
printSolution();
for i <- 0 to n {
if (isValid(pos ++ i, n)) {
if (solve(pos ++ i, n))
return true;
}
}
return false;
}
```