2014-08-29 6 views
0

나는 8 개의 왕비 문제를 풀기 위해 프로그램을 만들려고 노력하고있다.하지만, 마지막 리턴에 도달하지 못하게하고, 다른 사람에게 퍼팅을 시도했으나, 처음에 준다하더라도 결코 도달하지 못했다. 빈 스택. 이유는 무엇이든 처음으로 내가 top() 함수를 호출하면, 내가 마지막으로 추가 한 것과 다른 요소를 반환하지만, 내가 다시 호출하면 올바른 요소를 반환합니다. 그래서 문제가 어디에 있는지 알고 싶습니다.스택에 아직 요소가있는 경우 "if stack is 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

'search (board, n); 대신'return search (board, n);을 사용하셨습니까? – Angew

답변

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 수단은 한 번만 확인하지,하지만 whileboard.empty() == true까지 samething을 의미한다.

+1

좋아, 어디서 문제인지, 분명히 나는 ​​약간의 변화를 가져올거야, 고마워. – user2308612