#6062. 应急通道
应急通道
题目描述
某城市正在进行应急通道规划。城市中心被划分为一个由若干方格组成的矩形区域,共有 N*M 个方格(1 <= N, M <= 1000)。每个方格根据道路与设施状况,具有不同的通行规则。
一支应急巡查小组需要从左上角方格 (1,1) 出发,前往右下角方格 (N,M)。巡查人员每次可以向上、下、左、右四个方向移动到相邻方格之一,且只能在 N *M 的矩阵内进行移动。
然而,不同类型的方格具有不同的通行特性:
- 类型 0(封闭区):无法进入。
- 类型 1(普通道路):可以正常通行。
- 类型 2(补给点):可以通行,并为该小组颁发电子“通行许可”(如果小组已经获得“通行许可”,则进入该区域不会重复颁发)。
- 类型 3(管控区):只有在小组获得电子“通行许可”时才能进入,进入管控区不会取消小组获得的电子“通行许可”。
类型 4(快速通道):
- 进入该方格后,将沿当前移动方向自动前进。
- 若下一个方格仍为快速通道,则继续前进。
- 直到遇到非快速通道方格,或无法继续通行为止。自动前进在无法继续时,停留在最后一个成功进入的方格。
- 每前进一个方格,计为一次移动。
- 一旦进入任意一个快速通道方格,若此前持有电子通行许可,则在自动前进开始之前,该许可立即失效。
请你计算巡查小组从起点到终点所需的最少移动次数。 如果无法到达终点,输出 -1。
输入格式
第一行包含两个整数 N, M,表示方格的行数和列数。
接下来 N 行,每行包含 M 个整数,表示方格类型:
- 0:表示封闭区。
- 1:表示普通道路。
- 2:表示补给点。
- 3:表示管控区。
- 4:表示快速通道。
数据保证起点 (1,1) 和终点 (N,M) 均为 1。
输出格式
输出一个整数,表示从起点到终点的最少移动次数;若无法到达,请输出 -1。
样例
4 4
1 0 2 1
1 1 4 1
1 0 4 0
1 3 1 1
10
5 8
1 0 1 1 1 1 1 1
1 1 1 0 0 0 0 1
0 0 1 1 1 0 1 1
1 1 0 0 1 0 1 0
1 1 1 1 1 1 1 1
11
6 8
1 4 4 4 4 4 4 1
1 0 0 0 0 0 0 0
1 2 1 4 4 4 1 1
1 0 0 0 0 0 0 1
1 4 4 4 2 1 1 1
1 1 1 1 1 1 1 1
12
数据范围
对于 100% 的数据,满足 1<=N, M<= 1000,每个方格类型为 0~4 的整数,起点与终点保证可通行,即:为数字 1。