当堆栈仍然有元素时,为啥会跳过“如果堆栈不为空”条件?
Posted
技术标签:
【中文标题】当堆栈仍然有元素时,为啥会跳过“如果堆栈不为空”条件?【英文标题】:Why does skips the "if stack not empty" conditional, when the stack still has elements?当堆栈仍然有元素时,为什么会跳过“如果堆栈不为空”条件? 【发布时间】:2014-08-29 06:47:42 【问题描述】:我正在尝试编写一个程序来解决八皇后问题,但是它一直到达最后一个返回,而它不应该,并尝试将它放在一个 else 上,但它从未到达它,即使我最初也是如此给它一个空堆栈。 同样无论出于何种原因,我第一次调用 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;
【问题讨论】:
您的意思可能是return search(board, n);
而不是search(board, n);
?
【参考方案1】:
使用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
。
【讨论】:
好的,我知道问题出在哪里了,显然我要改变一些东西,谢谢。以上是关于当堆栈仍然有元素时,为啥会跳过“如果堆栈不为空”条件?的主要内容,如果未能解决你的问题,请参考以下文章
如果没有空格分隔符,为啥 XmlReader 会跳过所有其他元素?
C-为啥Struct数组的冒泡排序会跳过Array中的第一个元素?
为啥我的时间 UILabel 从暂停状态恢复播放时会跳过 2 秒?