当堆栈仍有元素时,为什么跳过"if stack not empty"是有条件的?

Why does skips the "if stack not empty" conditional, when the stack still has elements?

本文关键字:not stack if empty 有条件 堆栈 元素 为什么      更新时间:2023-10-16

我正试图制作一个程序来解决八皇后问题,但它一直达到最后一个返回,而它不应该达到,并试图将它放在其他程序上,但后来它一直没有达到,即使我最初给它一个空堆栈。无论出于什么原因,我第一次调用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