用 Python 计算逃离迷宫矩阵的最少移动次数
pythonserver side programmingprogramming更新于 2026/1/19 19:56:17
假设我们有一个二进制矩阵,其中 0 表示空单元格,1 表示墙。如果我们从左上角 (0, 0) 开始,我们必须找到到达右下角所需的最少单元格数 (R-1, C-1),其中 R 是行数,C 是列数。如果我们找不到任何答案,则返回 -1。
因此,如果输入如下
| 0 | 0 | 0 | 1 | 0 |
| 0 | 0 | 1 | 1 | 0 |
| 0 | 0 | 0 | 1 | 1 |
| 1 | 1 | 0 | 0 |
那么输出将是 8,因为我们可以选择如下路径−
| 0 | 0 | 0 | 1 | 0 |
| 0 | 0 | 1 | 1 | 0 |
| 0 | 0 | 0 | 1 | 1 |
| 1 | 1 | 0 | 0 | 0 |
为了解决这个问题,我们将遵循以下步骤 −
- R := 行数
- C := 列数
- q := 一个空列表,如果 matrix[0, 0] 为 0,则最初插入 (0, 0, 1)
- matrix[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,执行
- 如果 0 <= x < R 且 0 <= y < C 且 matrix[x, y] 与 0 相同,则
- matrix[x, y] := 1
- 在 q 末尾插入三元组 (x, y, d + 1)
- 如果 0 <= x < R 且 0 <= y < C 且 matrix[x, y] 与 0 相同,则
- 返回 -1
示例
让我们看看下面的实现以便更好地理解 −
def solve(matrix): R, C = len(matrix), len(matrix[0]) q = [(0, 0, 1)] if not matrix[0][0] else [] matrix[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 matrix[x][y] == 0: matrix[x][y] = 1 q.append((x, y, d + 1)) return -1 matrix = [ [0, 0, 0, 1, 0], [0, 0, 1, 1, 0], [0, 0, 0, 1, 1], [1, 1, 0, 0, 0] ] print(solve(matrix))
输入
[ [0, 0, 0, 1, 0], [0, 0, 1, 1, 0], [0, 0, 0, 1, 1], [1, 1, 0, 0, 0] ]
输出
8
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/
打印 下一节:Python Pandas - 返回 DateTimeIndex 中特定时间的值的索引位置 ❯❮ 上一节:Python Pandas - 检测给定 DatetimeIndex 对象的频率
- 如果 (r, c) 与 (R - 1, C - 1) 相同,则

