用右手定则在迷宫中回溯

本文关键字:回溯 迷宫 右手定则 | 更新日期: 2023-09-27 17:52:49

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

用右手定则在迷宫中回溯

您的错误是逻辑错误。想想你是怎么设计它的

鼠标将移动到一个正方形,然后检查所有的边。如果鼠标处于死胡同,那么所有的边都将被关闭,除了一条边,但这条边将被访问。

因此,如果最终鼠标没有移动,则需要回溯。沿着你所做的路径,直到右手规则给你一个你还没有访问过的空间。