P5806 [SEERC 2019] Stranded Robot

题目描述

在废弃宇宙飞船的残骸中,有一个机器人。残骸的某处有一个传送机,可以将这个可怜的机器人送至安全的地方。 宇宙飞船不受控制地在各个方向上翻滚。一个邻近的恒星发出的光可以照到残骸上。飞船配备了人工重力发生器。人工重力总是向远离恒星的方向拉机器人,无论飞船的方向如何。 机器人配备了太阳能电池板,必须依赖太阳能才能在残骸上移动。当残骸的一部分挡住了光照,机器人就无法移动了。然而,机器人总是会在移动后将自己固定住,以免被晃走或者掉入宇宙中。 残骸和残骸周围的区域可以用一个大小为 $m \times n \times p$ 的三维坐标空间表示。每个空间中的小方格都可能是残骸的一部分或真空。飞船残骸可能不是连在一起的。 机器人最开始固定在飞船的某一块上。机器人可以决定什么时候移动或什么时候等光照从合适的方向照过来。 形式化地说,重力可以在六个方向上作用于机器人,包括三个坐标轴上各两个方向。当一个格子在重力的反方向上没有残骸遮挡时,这个格子就有光照。当进行移动时,起点和终点都必须同时有光照。 以下是可用的移动方式:(光照从图片所示空间的上方照下;蓝色格子代表机器人;橙色格子代表可能的移动终点) 1. **在平地移动** 假如机器人固定在某一块上,它可以移动到相邻的块上,这些块必须与起点同高。 机器人无法斜向移动。终点必须也有光照。 ![移动1](https://cdn.luogu.com.cn/upload/image_hosting/sf5pxkhr.png) 2. **从高处跳下** 机器人可以从高处走出一步,然后落下。落下的高度没有限制。 机器人不能落入宇宙中,也不能落到没有光照的地方。 ![移动2](https://cdn.luogu.com.cn/upload/image_hosting/8jwv3v8y.png) 3. **掉落** 假如机器人有光照且悬在空中,它可以掉落下来。这种情况可能会在重力的方向改变后产生。 机器人不能掉入宇宙中。 ![移动3](https://cdn.luogu.com.cn/upload/image_hosting/8ei3yfks.png) 机器人的目标是到达传送机的所在地,如果有多种走法,则使用移动次数最少的走法。传送机工作要求机器人必须固定在飞船上。换句话说,机器人必须在某一次移动之后到达传送机的位置上,但掉落时经过它是无法工作的。传送机不会遮住光照或阻挡机器人的移动。

输入格式

第一行包含三个整数 $m, n, p \ (1 \leq m, n, p \leq 500)$。 飞船和飞船周围的空间被描述为 $p$ 块。 第 $k$ 块描述了高度为 $k$ 的格子。每块都包含 $n$ 行。 第 $k$ 块的第 $i$ 行包含 $m$ 个字符,描述该格子的情况。令 $a_{ijk}$ 代表第 $j$ 个字符。 - 如果 $a_{ijk}$ 是 `*`,则这个格子是残骸。 - 如果 $a_{ijk}$ 是 `-`,则这个格子是真空。 - 如果 $a_{ijk}$ 是 `R`,则这个格子是机器人。数据保证只有一个格子是机器人,且机器人被固定在一个残骸格子上。 - 如果 $a_{ijk}$ 是 `T`,则这个格子是传送机。数据保证只有一个格子是传送机。

输出格式

输出到达传送机处所需的最少移动数。如果无解,输出 $-1$。