📅  最后修改于: 2023-12-03 15:39:45.609000             🧑  作者: Mango
给定一个为0和1的二维矩阵,每个1表示可以走的路径,每个0表示不能走的障碍物。现在你可以从左上角出发,朝右或朝下走,直到达到右下角。找到到达右下角所需的最小步骤。如果无法到达右下角,则返回-1。
输入:
grid = [
[1, 0],
[1, 1]
]
输出: 2
解释:
1 -> 1 -> 1,到达右下角所需的最小步骤为2。
输入:
grid = [
[1, 1, 0],
[1, 1, 1],
[0, 1, 1]
]
输出: 1
解释:
1 -> 1 -> 1 -> 1 -> 1,到达右下角所需的最小步骤为4。
题目要求最小步骤,我们可以考虑使用BFS来解决。我们从左上角开始,朝右或下走,每到达一个格子,就记录一下步数,并将下一个可能到达的格子加入队列。由于我们是按照步数来遍历的,所以第一次到达终点的时候,一定是最短步数。如果遍历完整个矩阵都没有到达终点,则返回-1,表示无法到达。
以下是Python的实现代码片段:
def minSteps(grid):
rows, cols = len(grid), len(grid[0])
visited = [[False] * cols for _ in range(rows)]
queue = [(0, 0, 0)] # (row, col, steps)
dirs = [(0, 1), (1, 0)]
while queue:
row, col, steps = queue.pop(0)
if row == rows - 1 and col == cols - 1:
return steps
for dir in dirs:
new_row, new_col = row + dir[0], col + dir[1]
if 0 <= new_row < rows and 0 <= new_col < cols and grid[new_row][new_col] == 1 and not visited[new_row][new_col]:
visited[new_row][new_col] = True
queue.append((new_row, new_col, steps + 1))
return -1
以上代码在Python中实现了最短步数的BFS解法,时间复杂度为$O(n^2)$,其中$n$为矩阵的长度和宽度。