import queue
class Solution:
def updateMatrix(self, mat) :
m, n = len(mat), len(mat[0])
dist = [[0] * n for _ in range(m)]
q = queue.Queue()
visited = [[False] * n for _ in range(m)]
for i in range(m):
for j in range(n):
if mat[i][j] == 0:
q.put((i, j))
visited[i][j] = True
while not q.empty():
i, j = q.get()
# 遍历(i,j)的上下左右,如果没访问过就设置距离,并设访问标记,入队
for ni, nj in [(i - 1, j), (i + 1, j), (i, j - 1), (i, j + 1)]:
if ni >=0 and ni < m and nj >= 0 and nj < n and not visited[ni][nj]:
dist[ni][nj] = dist[i][j] + 1
visited[ni][nj] = True
q.put((ni, nj))
return dist