Как пройти лабиринт программно, когда вы попали в тупик - PullRequest
1 голос
/ 02 сентября 2008

Продвигаться по лабиринту вперед довольно легко, но я не могу понять, как пройти через лабиринт, чтобы попробовать новый маршрут, как только вы попали в тупик, не возвращаясь слишком далеко?

Ответы [ 3 ]

4 голосов
/ 02 сентября 2008

Используйте backtracking , сохраняя стек предыдущих решений о направлении.

2 голосов
/ 02 сентября 2008

Самым простым (реализуемым) алгоритмом было бы просто сохранить стопку местоположений, в которых вы были, и маршрут, по которому вы выбирались, если только обратный поиск не даст вам эту информацию.

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

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

Я не совсем уверен, что вы подразумеваете под , заходя слишком далеко , хотя, я бы предположил, что вы захотите вернуться в предыдущее место, где у вас есть непроверенные маршруты, разве это не то, что вы хотите? 1011 *

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

Простой рекурсивный метод, который помечает путь, по которому он идет, и никогда не входит в отмеченные области, может легко это сделать.

Кроме того, если ваша вещь , которая движется через лабиринт, немного умнее, чем просто способность двигаться и ударять (останавливаться) на стенах, так как она может видеть из своей текущей точки во всех направлениях, У меня есть другие алгоритмы, которые могут помочь.

1 голос
/ 03 сентября 2008

Эрик Липперт написал серию статей о создании C # реализации A *, которая может быть более эффективной.

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