Недавно я столкнулся с проблемой, которая заявила;
Предположим, что лабиринт с символами *
, .
, C
. *
представляет собой стены и .
/C
разрешены. Есть только одна точка, которая отмечена C
. Теперь, когда бот стоит на любой из разрешенных точек, существует серия команд (например, LDDRU
или LLLRRDU
и т. Д.), Так что если бот начинается с любой допустимой точки, он проходит по крайней мере один раз через C
.
Например:Решение лабиринта со всех стартовых точек
******
*.C..*
**.***
*....*
******
Команда: RLLURUU
Теперь я знаю, как решить лабиринт с помощью DFS/BFS (для кратчайшего пути). Но может ли кто-нибудь дать понять, как я буду продолжать такие проблемы?
РЕДАКТИРОВАТЬ: если следующий шаг в стену/внешний лабиринт, он игнорируется. И как обычно L
IS LEFT R
ПРАВИЛЬНО U
IS UP D
IS DOWN.
Дальнейшее перемещение по горизонтали - 3 шага; так, например, например; LLL, вы можете быть только на трех позициях в сетке; после другого R вы можете находиться в трех положениях в вертикальном коридоре; после UU вы обязательно пропустили C. Итак, в общем: сделайте несколько ходов, которые уменьшают количество позиций, в которых вы могли бы находиться, а затем отслеживайте все ваши возможные роботы и делайте каждый проход через C, используя «если есть стена, то робот не двигается». Каждый раз, когда два возможных робота оказываются на одном и том же квадрате, удалите один из них. – m69
@ m69, спасибо за ответ. Но, чтобы быть более ясными, можете ли вы использовать приведенный пример и объяснить свою логику, приходящую на ответ ... спасибо! – yobro97
Существует 9 возможных позиций в 3 строках; после LLL любой робот находился бы в самом левом положении в своем ряду, так что теперь у вас есть только 3 возможных положения; после другого R, 3 робота будут находиться во втором левом положении (вертикальный коридор); после UU они все закончили бы на C. – m69