1091. 二进制矩阵中的最短路径 #
- 标签:广度优先搜索、数组、矩阵
- 难度:中等
题目大意 #
给定一个 n * n
的二进制矩阵 grid
。 grid
中只含有 0
或者 1
。grid
中的畅通路径是一条从左上角 (0, 0)
位置上到右下角 (n - 1, n - 1)
位置上的路径。该路径同时满足以下要求:
- 路径途径的所有单元格的值都是
0
。 - 路径中所有相邻的单元格应该在
8
个方向之一上连通(即相邻两单元格之间彼此不同且共享一条边或者一个角)。 - 畅通路径的长度是该路径途径的单元格总数。
要求:计算出矩阵中最短畅通路径的长度。如果不存在这样的路径,返回 -1
。
解题思路 #
使用广度优先搜索查找最短路径。具体做法如下:
- 使用队列
queue
存放当前节点位置,使用 set 集合visited
存放遍历过的节点位置。使用count
记录最短路径。将起始位置(0, 0)
加入到queue
中,并标记为访问过。 - 如果队列不为空,则令
count += 1
,并将队列中的节点位置依次取出。对于每一个节点位置:- 先判断是否为右下角节点,即
(n - 1, n - 1)
。如果是则返回当前最短路径长度count
。 - 如果不是,则继续遍历
8
个方向上、没有访问过、并且值为0
的相邻单元格。 - 将其加入到队列
queue
中,并标记为访问过。
- 先判断是否为右下角节点,即
- 重复进行第 2 步骤,直到队列为空时,返回
-1
。
代码 #
|
|