Возврат по правому правилу в лабиринте

Я пытаюсь решить лабиринт, используя правило правой руки, но мой возврат не работает правильно. Всякий раз, когда он попадает в тупик, он просто перестает проходить. Это может быть что-то не так с моим утверждением if else. Тем не менее, трудно отладить в форме окна, и я даже не могу понять, что я сделал не так. Кто-нибудь скажет мне, что не так с моей функцией? Спасибо. Вот что у меня есть для моего лабиринта:

          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 ответ

Ваша ошибка - логическая ошибка. Подумай, как ты это делаешь.

Мышь переместится на квадрат, затем проверит все стороны. Если мышь находится в тупике, то все стороны будут закрыты, кроме одной, но эта одна сторона будет посещена.

Таким образом, если вы в итоге не двигаете мышь, вам нужно вернуться назад. Следуйте по пройденному вами пути, пока правило правой руки не даст вам место, которое вы еще не посетили.

Другие вопросы по тегам