#19. 25年6月-华为实习(留学生)-2.迷宫最短路径

题目描述
题解
题库

25年6月-华为实习(留学生)-2.迷宫最短路径

题目内容

给定一个迷宫的地图,地图是一个二维矩阵,其中 0 表示通道,1 表示墙壁,s 表示起点,E 表示终点。你需要从起点 S 出发,通过最短路径到达终点 E,返回最短路径的步数,如果无法到达终点,则返回 -1,迷宫中会有虫洞,用数字 2 表示,成对出现,你走入虫洞可以穿越到另一个虫洞出口,耗费 0 步。

你只能上下左右移动,并且不能走出迷宫的边界,也不能穿越墙壁。

输入描述

第一行包含两个整数 m, n (1 ≤ m, n ≤ 50),表示迷宫的行数和列数。

接下来的 m 行,每行包含 n 个字符,表示迷宫的地图。字符为:

  • 0:表示通道
  • 1:表示墙壁
  • 2:表示虫洞
  • S:表示起点
  • E:表示终点

输出描述

如果能够到达终点,输出最短路径的步数。如果无法到达终点,输出 -1。

样例1

输入

5 5
S0000
11100
01010
01010
0000E

输出

8

说明

在这个例子中,最短的路径如下所示: S -> (0,1) -> (0,2) -> (0,3) -> (0,4) -> (1,4) -> (2,4) -> (3,4) -> E 共8步。

样例2

输入

3 3
S00
111
E00

输出

-1

说明

在这个例子中,起点 S 和终点 E 被墙壁阻隔,因此无法到达终点,输出 -1。

样例3

输入

3 3
S02
111
E02

输出

4

说明

在这个例子中,最短的路径如下所示: S -> (0,1) -> (0,2) -> (2,1) -> E 共 4 步。 (0,2) 进入虫洞后,可直接从 (2,1) 出来,不消耗步数。