gpt4 book ai didi

c++ - 为什么在堆栈仍有元素时跳过 "if stack not empty"条件?

转载 作者:行者123 更新时间:2023-11-28 00:24:53 27 4
gpt4 key购买 nike

我正在尝试编写一个程序来解决八皇后问题,但是它一直在到达最后一次返回,而它不应该,并尝试将它放在其他地方,但后来它从未到达它,即使我最初给它一个空堆栈。同样出于某种原因,我第一次调用 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;
}

最佳答案

使用 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

关于c++ - 为什么在堆栈仍有元素时跳过 "if stack not empty"条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25562985/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com