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


假设我们有一个二维网格表示迷宫,其中 0 表示空位,1 表示墙壁。我们从网格 [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, c) 与 (R - 1, C - 1) 相同,则

      • 返回 d


      • 对于 [(r + 1, c) ,(r - 1, c) ,(r, c + 1) ,(r, c - 1) ] 中的每个 (x, y),执行以下操作:

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

          • A[x, y] := 1

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

  • 返回 -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

更新时间: 2020年10月21日

168 次浏览

开启你的 职业生涯

通过完成课程获得认证

立即开始
广告

© . All rights reserved.