程序查找到达Python右下角所需的最小单元数

假设我们有一个表示迷宫的2D网格,其中0表示空白,1表示墙。我们将从grid [0,0]开始,我们必须找到到达网格右下角所需的最小平方数。如果我们无法到达,则返回-1。

所以,如果输入像

000
100
100

那么输出将是5

为了解决这个问题,我们将遵循以下步骤-

  • R:=网格的行数,C:=网格的列数

  • q:= [0,0,1],当A [0,0]为1时,否则为新列表

  • A [0,0]:= 1

  • 对于q中的每个(r,c,d),执行

    • 对于[[r + 1,c),(r − 1,c),(r,c +1),(r,c − 1)]中的每个[x,y]

    • A [x,y]:= 1

    • 在q的末尾插入(x,y,d + 1)

    • 如果x在0到R的范围内,y在0到C的范围内,并且A [x,y]等于0,则

    • 返回d

    • 如果(r,c)与(R − 1,C − 1)相同,则


    • 返回-1

    让我们看下面的实现以更好地理解-

    示例

    class Solution:
       def solve(self, A):
          R, C = len(A), len(A[0])
          q = [(0, 0, 1)] if not A[0][0] else []
          A[0][0] = 1
          for r, c, d in q:
             if (r, c) == (R − 1, C − 1):
                return d
             for x, y in [(r + 1, c), (r − 1, c), (r, c + 1), (r, c −1)]:
                if 0 <= x < R and 0 <= y < C and A[x][y] == 0:
                   A[x][y] = 1
                   q.append((x, y, d + 1))
          return −1
    ob = Solution()grid = [
       [0, 0, 0],
       [1, 0, 0],
       [1, 0, 0]
    ]
    print(ob.solve(grid))

    输入值

    grid = [ [0, 0, 0], [1, 0, 0], [1, 0, 0] ]

    输出结果

    5