#P2305. 【华为留学生】2025-6-11-第二题-走迷宫(三)

【华为留学生】2025-6-11-第二题-走迷宫(三)

题目描述

给定一个迷官的地图,地图是一个二维矩阵,其中 00 表示通道,11 表示墙壁,ss 表示起点,EE 表示终点。你需要从起点 SS 出发,通过最路径到达终点 EE ,返回最短路径的步数,如果无法到达终点,则返回 1-1,迷宫中会有虫洞,用数字 22 表示,成对出现,你走入虫洞可以穿越到下一个虫洞出口,耗费 00 步(也可以从下一个虫洞穿越到当前虫洞)。

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

输入描述

第一行输入两个整数 m,n(1m,n50)m,n(1\le m,n\le 50) ,表示迷宫的行数和列数。

接下来的 mm 行,每行输入 nn 个字符,表示迷宫的地图。字符为:

00:表示通道

11:表示墙壁

22:表示虫洞

SS:表示起点

EE:表示终点

输出描述

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

样例1

输入

5 5
S0000
11110
01010
01010
0000E

输出

8

样例解释

在这个例子中,最短的路径如下所示:

$S\to (0,1)\to (0,2)\to (0,3)\to (0,4)\to (1,4)\to (2,4)\to (3,4)\to E$

共8步。

样例2

输入

3 3
S00
111
E00

输出

-1

样例解释

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

样例3

输入

3 3
S02
111
E02

输出

4

样例解释

在这个例子中,最短的路径如下所示:

S(0,1)(0,2)(2,1)ES \to (0,1)\to (0,2)\to (2,1)\to E44 步。

(0,2)(0,2) 进入虫洞后,可直接从 (2,1)(2,1) 出来,不消耗步数