Забавно, что @mousey спрашивал о крысе ... anwyay.
Я уже видел эту проблему уже несколько раз.
Первое (и наивное) решение - этоследовать за левой (или правой) стеной, однако возможно создать определенные лабиринты, в которых крыса в конечном итоге бежит кругами.
Фактически, для каждого детерминированного порядка движений (например, 2L, 1R, 2L, 1R, ...) что я пытался (будучи в старшей школе, у меня было время) мы могли придумать лабиринт, который заставлял бы крысу бегать кругами.Конечно, чем сложнее цикл, тем сложнее лабиринт.
Поэтому, если у вас есть O (1) памяти, единственным выходом из лабиринта кажется случайное блуждание, как было предложеноМарк Байерс.К сожалению, вы не можете доказать, что невозможно выйти из лабиринта с помощью такого алгоритма.
С другой стороны, если у вас есть O (N) памяти, это сводится к созданию карты (каким-то образом).Стратегия, которую я наконец-то придумал, заключалась в том, чтобы оставить феромон (увеличивая счетчик) в каждом пройденном мной случае, и, когда у меня есть выбор в движении, выбирать среди наименее посещаемых случаев.Однако всегда можно было выбраться, поэтому мне никогда не приходилось думать о состоянии завершения в случае отсутствия выхода.
Вы также можете использовать алгоритм заливки ... Конечно, это было до того, как я узнало сроке БФС.Преимущество этого в том, что у вас есть условие завершения (когда не осталось ни одного случая для изучения).