P16006 [ICPC 2020 NAC] Tomb Raider
题目描述
古墓丽影胡进入了一座新古墓!古墓里布满了石像鬼、镜子和障碍物。有一扇门,门后藏着宝藏。胡必须打开这扇守护宝藏的门。门上用古老的文字写着开门的秘诀:
> 每个石像鬼的每一张脸都应当看到另一张石像鬼的脸。
这意味着石像鬼必须被旋转,使得光线束能够从每个石像鬼的一张脸出发,到达另一张石像鬼的脸(可能是它自己的另一张脸)。光线可以在镜子中反射。
古墓的平面图可以描述为一个 $n \times m$ 的矩形网格,每个格子可能是:
- 点号 (`.`) 表示空格子。
- 井号 (`#`) 表示障碍物。
- 正斜线 (`/`) 表示双面镜,反斜线 (`\`) 也表示双面镜。
- 字符 `V` 表示一个石像鬼,它的两张脸分别朝向上方和下方。
- 字符 `H` 表示一个石像鬼,它的两张脸分别朝向左侧和右侧。
除了 `\` 和 `/` 镜子之外,古墓的四周由镜面墙壁包围。关于光的传播,采用以下常识:
1. 光在空格子中沿直线传播。
2. 两束光可以相交而不互相干扰。
3. `\` 镜子将从上方、下方、左侧或右侧入射的光分别反射到右侧、左侧、下方或上方。
`/` 镜子将从上方、下方、左侧或右侧入射的光分别反射到左侧、右侧、上方或下方。
4. 光遇到墙壁(墙壁均为镜面)时,会被 $180$ 度反射。
5. 光被障碍物和石像鬼阻挡。
胡可以将任意一个石像鬼旋转 $90$ 度。时间紧迫,他想知道为了打开宝藏之门,至少需要旋转多少个石像鬼。
输入格式
输入的第一行包含两个空格分隔的整数 $n$ 和 $m$($1 \le n, m \le 500$),表示古墓的尺寸。
接下来的 $n$ 行,每行包含一个长度为 $m$ 的字符串 $s$,字符如上所述,表示古墓的平面图。
输出格式
输出一个整数,表示为了打开宝藏之门,至少需要旋转的石像鬼数量。如果无解,输出 $-1$。
说明/提示
**样例解释**
:::align{center}

:::
上图分别展示了样例输入 #1 的初始配置(左)和解法配置(右)。为了解开谜题,需要旋转三个石像鬼。
翻译由 DeepSeek V3.2 完成