leetcode 542.01 矩阵

110 阅读1分钟

542.01 矩阵

给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。两个相邻元素间的距离为 1 。

0 0 0		0 0 0
0 1 0  --> 	0 1 0
1 1 1	    1 2 1

注意:

  1. 给定矩阵的元素个数不超过 10000。
  2. 给定矩阵中至少有一个元素是 0。
  3. 矩阵中的元素只在四个方向上相邻: 上、下、左、右。
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记录路径长度