542.01 矩阵
给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。两个相邻元素间的距离为 1 。
0 0 0 0 0 0
0 1 0 --> 0 1 0
1 1 1 1 2 1
注意:
- 给定矩阵的元素个数不超过 10000。
- 给定矩阵中至少有一个元素是 0。
- 矩阵中的元素只在四个方向上相邻: 上、下、左、右。
class Solution:
def updateMatrix(self, matrix: List[List[int]]) -> List[List[int]]:
m, n = len(matrix), len(matrix[0])
r = [[0] * n for _ in range(m)]
around = ((0, 1), (1, 0), (0, -1), (-1, 0))
for i in range(m):
for j in range(n):
# -------------------------BFS 开始--------------------------
# 放入根节点
q = collections.deque([(i, j, 0)])
visited = {(i, j)}
# 循环取节点
while q:
a, b, t = q.popleft()
if not matrix[a][b]:
r[i][j] = t
break
# 放入邻节点
for x, y in around:
x, y = x + a, y + b
if 0 <= x < m and 0 <= y < n and (x, y) not in visited:
visited.add((x, y))
q.append((x, y, t + 1))
# ----------------------------------------------------------
return r
# 以当前位置为根,四周为邻,bfs求最短路径,t记录路径长度