Застрявший робот
Застрявший робот
Робот застрял среди обломков межзвездного космического корабля. Где-то среди обломков есть телепорт, который может доставить бедного робота в безопасное место.
Космический корабль выходит из-под контроля по всем осям. Ближайшее солнце освещает обломки. Корабль также оснащен генератором искусственной гравитации. Искусственная гравитация всегда уводит робота от солнца, независимо от ориентации корабля.
Робот оснащен солнечными панелями и должен использовать солнечную энергию, чтобы двигаться через обломки. Когда часть обломков загораживает солнце, робот неподвижен. Однако робот всегда закрепляется после каждого движения и не рискует разбиться или упасть в пустоту космоса.
Обломки и территория вокруг них представлены трехмерной сеткой a размера m * n * p. Каждый отдельный блок может быть либо частью корабля, либо пустотой. Блоки корабля можно разъединять.
Робот стартует, будучи прикрепленным к части корабля. Робот сам выбирает, когда ему двигаться, а когда ждать пока солнце не засветит с удобной стороны.
Говоря более формально, гравитация может тянуть робота в одном из 6 направлений: 2 направлений вдоль каждой из 3 осей. Ячейка освещена солнцем, если нет обломков от этой ячейки в направлении, противоположном силе тяжести. Перед каждым движением робот может эффективно выбирать направление, в котором его притягивает сила тяжести. При совершении хода и исходная, и конечная позиция должны одновременно освещаться солнцем.
Разрешены следующие ходы: (свет всегда светит сверху на следующих изображениях; синий блок (или более темный блок в черно-белых распечатках) представляет робота, а оранжевые блоки (или более светлые блоки) - возможные пункты назначения)
- Перемещение по полу Если робот покоится на вершине блока, он может переместиться в соседнее положение при условии, что он находится на той же высоте.
Робот не может двигаться по диагонали. Пункт назначения также должен быть освещен солнцем.
- Прыжок со скалы Робот может сделать шаг с возвышения и затем упасть. Нет ограничений от того, как долго длится падение.
Робот не может упасть в пустоту космоса или в неосвещенное место.
- Падение вниз Если робот освещен солнцем и окажется висящим, он может упасть. Это может произойти, если направление силы тяжести изменилось.
Робот не может упасть в пустоту космоса.
Цель состоит в том, чтобы добраться до телепорта, если это вообще возможно, используя наименьшее количество ходов. Чтобы телепорт работал, робот должен быть прочно прикреплен к кораблю. Другими словами, робот должен оказаться у телепорта в конце разрешенного хода, и спуститься через него не получится. Телепорт не блокирует ни солнце, ни движение робота.
Входные данные
Первая строка содержит три целых числа m, n, p (1 ≤ m, n, p ≤ * 500*).
Космический корабль и область вокруг космического корабля описываются p блоками.
k-й блок описывает блок, расположенный на k-й высоте. Каждый блок состоит из n строк.
i-я строка k-го блока состоит из m символов. j-й символ называется aijk
.
- Если
aijk
равно "*", то это полный блок. - Если
aijk
равно "-", то это пустой блок. - Если
aijk
равно "R", то этот блок содержит робота. Гарантируется, что такой блок только один.
Гарантируется, что робот находится возле полного блоку.
- Если aijk
равно "T", то этот блок содержит телепорт. Гарантируется, что такой блок только один.
Выходные данные
Выведите минимальное количество ходов, необходимое для достижения телепорта, или -1, если телепорт недоступен.
2 5 1 R- *- *- *T **
1
3 2 1 R-T ***
2
3 3 1 -R- -*- -T-
-1
5 4 2 -R--- -**** -**** -**** ----- ----- *T--- ----*
5