在迷宫中使用右手规则进行回溯

时间:2014-03-25 05:58:50

标签: c# maze

我试图通过使用右手规则解决迷宫,但我的回溯无法正常工作。每当它遇到死胡同时,它就会停止穿越。我的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;
          }

1 个答案:

答案 0 :(得分:0)

你的错误是一个逻辑错误。想想你是如何设计它的。

鼠标将移动到正方形,然后检查所有侧面。如果鼠标处于死胡同,则除了一个之外,所有侧面都将被关闭,但是将会访问一侧。

因此,如果您最终没有移动鼠标,则需要回溯。按照您所做的路径行进,直到右手规则为您提供尚未访问过的空间。