Python程序:查找到达右下角所需的最小单元格数量
假设我们有一个二维网格表示迷宫,其中 0 表示空位,1 表示墙壁。我们从网格 [0, 0] 开始,需要找到到达网格右下角所需的最小正方形数量。如果无法到达,则返回 -1。
因此,如果输入如下所示:
| 0 | 0 | 0 |
| 1 | 0 | 0 |
| 1 | 0 | 0 |
则输出为 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
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP