2014-08-29 33 views
0

我试图做一个程序来解决八皇后问题,但它保持到最后的回报,当它不应该,并试图把它放在一个别的,但它从来没有达到它,即使我最初给它是一个空的堆栈。 同样出于任何原因,我第一次调用top()函数时,它会返回与上次添加的元素不同的元素,但如果我再次调用它,则会返回正确的元素。 所以我想知道问题在哪里?为什么在堆栈仍有元素时跳过“if stack not empty”条件?

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

你也许是指'返回搜索(board,n);'而不是仅仅搜索(board,n);'? – Angew 2014-08-29 07:20:50

回答

3

使用whileif

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意味着做samething直到board.empty() == true

+1

好吧,我看到问题的地方,显然我会改变一些事情,谢谢。 – user2308612 2014-08-29 07:17:54