2014-03-25 51 views
0

我試圖通過使用右手規則來解決迷宮,但是我的回溯工作不正常。每當它遇到死衚衕時,它就停止遍歷。我的if else語句可能有問題。然而,這很難在Windows窗體中進行調試,我甚至無法弄清楚我做錯了什麼。有人會告訴我我的功能有什麼問題嗎?謝謝。 這就是我的迷宮:在迷宮中使用右手規則回溯

  public char[,] navigateMouse() 
      { 
       // check south 
       if (mouseMaze[yPos + 1, xPos] == ' ') 
       { 
        //mark the trail with '.' 
        mouseMaze[yPos, xPos] = '.'; 
        mouseMaze[yPos + 1, xPos] = 'M'; 
        yPos++; 
       } 
       // check east 
       else if (mouseMaze[yPos + 1, xPos] == 'X' && mouseMaze[yPos, xPos + 1] == ' ') 
       { 
        mouseMaze[yPos, xPos] = '.'; 
        mouseMaze[yPos, xPos + 1] = 'M'; 
        xPos++; 
       } 
       // check north 
       else if (mouseMaze[yPos + 1, xPos] == 'X' && mouseMaze[yPos, xPos + 1] == 'X' && 
        mouseMaze[yPos - 1, xPos] == '.') 
       { 
        mouseMaze[yPos, xPos] = '.'; 
        mouseMaze[yPos - 1, xPos] = 'M'; 
        yPos--; 
       } 
       // check west 
       else if (mouseMaze[yPos + 1, xPos] == 'X' && mouseMaze[yPos, xPos + 1] == 'X' && 
        mouseMaze[yPos - 1, xPos] == 'X' && mouseMaze[yPos - 1, xPos] == '.') 
       { 
        mouseMaze[yPos, xPos] = '.'; 
        mouseMaze[yPos, xPos - 1] = 'M'; 
        xPos--; 
       } 
       return mouseMaze; 
      } 

回答

0

你的bug是一個邏輯錯誤。想想你是如何設計它的。

鼠標將前往一個正方形,然後檢查所有的邊。如果鼠標處於死角,那麼除了一邊以外,所有邊都將被關閉,但是將會訪問一邊。

因此,如果最終鼠標不移動,則需要回溯。按照您所做的路徑操作,直到右手邊的規則爲您提供尚未訪問的空間。

+0

所以這意味着我必須檢查每個方向每當我到達一個正方形,如果4邊碰巧關閉,那麼我必須回溯並跟蹤我已標記的線索。你是這個意思嗎 ? –

+0

是的。那是對的。 –

+0

謝謝,我會再試一次。 –