Стены следуют за лабиринтом - PullRequest
2 голосов
/ 19 марта 2011

У меня проблемы с алгоритмом решения лабиринтов.Я пытаюсь реализовать правило левой руки.

public Direction move(View v) {
    if (!wallExistsToLeft(v)) {
        turnLeft();
    } else if (v.mayMove(direction)) {
        return direction;
    } else if (!wallExistsToRight(v)){
        turnRight();
    } else {
        turnAround();
    }
    return direction;
}

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

turnX меняет направление в зависимости от направления, в котором вы находитесь 'в настоящее время он обращен к

Функция перемещения возвращает направление, в котором решатель лабиринта перемещается на 1 пробел в этом направлении.

Может ли кто-нибудь указать мне правильное направление?Я уверен, что есть какой-то простой рекурсивный способ, которым это может быть реализовано, но я не могу решить это.

В настоящее время я проваливаю эти два теста:

enter image description here

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

2 голосов
/ 19 марта 2011

На ваших фотографиях похоже, что вы всегда поворачиваете направо.

Что из вашего кода будет означать, что wallExistsToLeft (v) всегда возвращает true, а v.mayMove (direction) всегда возвращает false.

0 голосов
/ 15 мая 2014

Правило левой руки применимо, только если начало и цель находятся рядом с сегментами стены одного и того же соединенного компонента стен. Если в центре комнаты есть колонна и вы начинаете рядом с ней, вы всегда будете обходить ее. Вторая проблема связана с просторами. Если нет стены, за которую можно цепляться, то алгоритм всегда будет ходить по кругу. Обычно думают, если узкие коридоры, предлагая этот алгоритм. Таким образом, независимо от того, верна ли ваша реализация, тестовые случаи не могут быть пройдены простым правилом левой руки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...