#abc184e. [abc184_e]Third Avenue
[abc184_e]Third Avenue
问题描述
有一个以 行 列的二维网格表示的城镇。
字符 描述了从上方第 行、从左边第 列的方块。这里, 是以下之一:S
, G
, .
, #
, a
, ..., 和 z
。
#
表示无法进入的方块,a
到 z
表示带有传送门的方块。
高桥最初位于表示为 S
的方块上。每秒钟,他可以进行以下移动之一:
- 转移到当前位置水平或垂直相邻的非
#
方块。 - 选择与当前位置相同字符的方块,并传送到该方块。当他在一个表示为
a
到z
的方块上时,只能使用此移动方式。
找出从表示为 S
的方块到表示为 G
的方块所需的最短时间。
如果无法到达目的地,则打印 -1
。
约束条件
- 是
S
,G
,.
,#
, 或小写英文字母。 - 只有一个方块表示为
S
,一个方块表示为G
。
输入
输入以以下格式从标准输入给出:
输出
打印从表示为 S
的方块到表示为 G
的方块所需的最短时间。
如果无法从初始位置到达目的地,则打印 -1
。
示例输入 1
2 5
S.b.b
a.a.G
示例输出 1
4
记 为从上方第 行、从左边第 列的方块。
最初,高桥位于 。从 在四秒内到达 的一种方法是:
- 从 转移到 ;
- 从 传送到 ,它也是一个
a
方块; - 从 转移到 ;
- 从 转移到 。
示例输入 2
11 11
S##...#c...
...#d.#.#..
..........#
.#....#...#
#.....bc...
#.##......#
.......c..#
..#........
a..........
d..#...a...
.#........G
示例输出 2
14
示例输入 3
11 11
.#.#.e#a...
.b..##..#..
#....#.#..#
.#dd..#..#.
....#...#e.
c#.#a....#.
.....#..#.e
.#....#b.#.
.#...#..#..
......#c#G.
#..S...#...
示例输出 3
-1