用 Python 编写程序,找出到达右下角所需的最少格子数
pythonserver side programmingprogramming更新于 2026/2/4 13:32:17
假设我们有一个 2D 网格,代表迷宫,其中 0 表示空白空间,1 表示墙壁。我们将从网格 [0, 0] 开始,我们必须找出到达网格右下角所需的最少格子数。如果无法达到,则返回 −1。
因此,如果输入如下
| 0 | 0 | 0 |
| 1 | 0 | 0 |
| 1 | 0 | 0 |
则输出为 5
要解决此问题,我们将遵循以下步骤 −
R := 网格的行数,C := 网格的列数
当 A[0, 0] 为 1 时,q := [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
在 q 末尾插入 (x, y, d + 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
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

