2014-08-29 28 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