网格从左上角 (0,0) 走到右下角 (h−1,w−1),四连通、障碍为 1,路径长度按格子数计(起点算一格)。边权全为 1,最短路就是 BFS:第一次到达终点时的距离即为答案。
实现方法:若起点或终点是货架,直接返回 −1。否则把起点距离记为 1 入队,每次向四邻扩展未访问的空地,距离加一。队列空仍未到达则返回 −1。
时间复杂度 O(hw),每个格子最多入队一次。空间复杂度 O(hw),用于距离数组与队列。h,w≤500,可在时限内通过。
冷链库区的地坪被划分成 h 行 w 列的格子。格子取值 0 表示空地,可以踏入;取值 1 表示货架底座,禁止进入。值班员要从西北角格子 (0,0) 走到东南角格子 (h−1,w−1)。每一步只能迈向上、下、左、右四个相邻格子中的空地,不允许斜向移动,也不得踏出库区。
路径长度定义为途经格子的个数,起点计入。请输出最短路径的长度;若无法抵达东南角,输出 -1。
约束:
0 或 1第一行两个整数 h、w(1≤h,w≤500),表示行数和列数。
随后 h 行,每行 w 个整数,表示各地砖:0 为空地,1 为货架。
输出一个整数:最短路径上的格子数;无法到达则输出 -1。
输入
3 4
0 0 1 0
1 0 0 0
0 0 1 0
输出
6
说明
一条最短走法是 (0,0)→(0,1)→(1,1)→(1,2)→(1,3)→(2,3),共 6 格。第一行第 3 格与第三行第 3 格是货架,不能沿这两行横穿到终点。曼哈顿距离对应的格子数也是 6,因此不存在更短路径。
输入
3 3
0 1 0
0 1 0
1 0 0
输出
-1
说明
从 (0,0) 只能进入 (1,0),而 (1,0) 的四周不是货架就是已访问格子,无法再通向东南角。
输入
2 1
0
0
输出
2
说明
只有一列两格空地,走法是 (0,0)→(1,0),长度为 2。
© CodeFun2000 · 使用条款
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册