2011-10-25 130 views
-1

嗨即時通訊新的跟蹤Java中的網站很抱歉,如果這是一個重複的問題,但沒有以前的問題似乎符合我的遞歸早在迷宮

我練了迷宮結構中的搜索算法和我在遞歸回溯嘗試不工作

基本上我都跟着一本書Dietel卷7上鍛鍊創造一個迷宮和使用遞歸來找到解決辦法,但我所有的代碼所做的是:

  • 認定起始位置。
  • 到達下一個位置
  • 然後說,有沒有其他的移動和退出程序

這是我的方法,它知道它的體積龐大,但即時通訊仍然在它

public boolean mazeTraversal(char maze2[][], int x, int y) 
{ 
    lastX = x; 
    lastY = y; 
    maze[ x ][ y ] = 'x'; 
    printMaze(); 
    showPosition(); 
    showMoves(); 
    System.out.println("Press the key 'g' to traverse the maze : "); 
    move++; 

    if((x == Y_START) && (x == X_START) && (move > 1)) 
    { 
     System.out.println("You have gone back to the start"); 
     return false; 
    } 
    else if (mazeExited(x, y) && (move > 1)) 
    { 
     System.out.println("You have reached the end"); 
     return true; 
    } 

    else 
    { 
     char response = scanner.nextLine().charAt(0); 
     showPosition(); 
     showMoves(); 
     System.out.println("Enter 'g' to continue, 'e' to exit: "); 

     if(response == 'e') 
     { 
      System.exit(0); 
     } 

     if(response == 'g') 
      while(checkMaze(x,y) == validMove(x,y) && checkMaze(x,y)!= mazeExited(x,y)) 
      { 
       for(int count = 0; count < 4; count++) 
       { 
        switch (count) 
        { 
         case (DOWN): 
          if (validMove(x + 1, y)) 
          { 
           mazeTraversal(maze2, x + 1, y); 
          } 
          break; 

         case (RIGHT): 
          if (validMove(x, y + 1)) 
          { 
          mazeTraversal(maze2, x, y + 1); 
          } 
          break; 

         case (UP): // move up 
          if (validMove(x - 1, y)) 
          { 
           mazeTraversal(maze2, x - 1, y); 
          } 
         break; 

         case (LEFT): // move left 
          if (validMove(x, y - 1)) 
          { 
           mazeTraversal(maze2, x, y - 1); 
          }    
       } 
       } 
      } 
      } 
    return false; 

}工作

任何指針都會很棒。 謝謝邁克

+0

你有沒有試圖追蹤你的代碼,看看它出錯了?實際上沒有人會爲你做這件事,所以你應該先調試,然後回來一個更具體的問題,如果你想。祝你好運。 – Egor

+0

感謝您的快速反應,特別注意這個問題。 –

回答

1

我會考慮返回您的遞歸調用mazeTraversal()在你的else塊,而不是返回false。

+0

感謝您的快速回復,將其分解並重新構建。 –

0

有幾件事。

1)maze2的目的是什麼?你從不使用它或改變它。也許你應該刪除迷宮2作爲參數,只是更新/參考迷宮[] [],而不是?

2)沒有退出條件。即使一次遞歸調用到達最後並返回true,也會顯示成功消息,然後程序將繼續嘗試遍歷迷宮。

3)while循環有很多錯誤。首先,條件將始終評估爲真實。它看起來不像你打破或退出循環),但你有幾個失蹤的大括號,所以我可能是錯的)。

+0

感謝您的快速回復,我們將其分解並重新構建 –