我正在尝试制作一个程序来解决八个皇后问题,但是当它不应该时,它会一直到达最后一个返回,并且尝试将它放在其他地方,但是它从未到达它,即使我最初给它一个空堆栈。 同样出于任何原因我第一次调用top()函数时,它返回的元素不同于我添加的最后一个元素,但如果我再次调用它,它将返回正确的元素。 所以我想知道问题出在哪里?
bool search(stack<nodo>& board, int n) {
nodo queen;
queen=board.top();
queen=board.top();
if (queen.y == n)
return true;
bool valid;
if (!board.empty()) {
queen.y += 1;
for(int i; i<=n; i++) {
queen.x = i;
valid = isvalid(queen,board);
if (valid) {
board.push(queen);
search(board,n);
}
}
board.pop();
}
return false;
}
答案 0 :(得分:3)
使用while
而不是if
while(!board.empty()) {
queen.y += 1;
for(int i; i<=n; i++){
queen.x = i;
valid = isvalid(queen,board);
if (valid) {
board.push(queen);
search(board,n);
}
}
board.pop();
}
if
表示只检查一次,但while
表示同样的事情直到board.empty() == true
。