AT_abc184_e [ABC184E] Third Avenue
题目描述
有一个用 $H$ 行 $W$ 列的二维网格表示的城市。
从上到下第 $i$ 行,从左到右第 $j$ 列的格子的内容由字符 $a_{i,j}$ 给出。$a_{i,j}$ 可能是 `S`、`G`、`.`、`#`、`a` 到 `z` 之一。
`#` 表示不能进入的格子,`a` 到 `z` 表示有传送门的格子。
高桥君一开始在 `S` 格子上,每经过 $1$ 秒可以进行以下任意一种移动:
- 移动到当前格子上下左右相邻的、不是 `#` 的格子。
- 选择一个与当前格子字符相同的格子并瞬间传送过去。只有当当前格子是 `a` 到 `z` 之一时才能使用这种移动。
请你求出高桥君从 `S` 格子移动到 `G` 格子所需的最短时间。
如果无论如何都无法到达 `G` 格子,请输出 $-1$。
输入格式
输入按以下格式从标准输入给出。
> $H$ $W$
> $a_{1,1}\dots a_{1,W}$
> $\vdots$
> $a_{H,1}\dots a_{H,W}$
输出格式
输出高桥君从 `S` 格子移动到 `G` 格子所需的最短时间。
如果无法从 `S` 格子到达 `G` 格子,则输出 $-1$。
说明/提示
### 限制条件
- $1 \leq H, W \leq 2000$
- $a_{i,j}$ 是 `S`、`G`、`.`、`#`、英文字母小写字母之一
- `S` 和 `G` 格子各恰好出现一次
### 样例解释 1
用 $(i, j)$ 表示从上到下第 $i$ 行、从左到右第 $j$ 列的格子。
一开始高桥君在 $(1, 1)$。例如,可以按如下步骤在 $4$ 秒内移动到 $(2, 5)$:
- 从 $(1, 1)$ 移动到 $(2, 1)$
- 从 $(2, 1)$ 通过传送门瞬间移动到同为 `a` 的 $(2, 3)$
- 从 $(2, 3)$ 移动到 $(2, 4)$
- 从 $(2, 4)$ 移动到 $(2, 5)$
由 ChatGPT 4.1 翻译