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} ![](https://cdn.luogu.com.cn/upload/image_hosting/58infcvf.png) ::: 上图分别展示了样例输入 #1 的初始配置(左)和解法配置(右)。为了解开谜题,需要旋转三个石像鬼。 翻译由 DeepSeek V3.2 完成