leetcode 542. 01 Matrix

Given a matrix consists of 0 and 1, find the distance of the nearest 0 for each cell.

The distance between two adjacent cells is 1.
Example 1:

Input:

1
2
3
0 0 0
0 1 0
0 0 0

Output:

1
2
3
0 0 0
0 1 0
0 0 0

Example 2:

Input:

1
2
3
0 0 0
0 1 0
1 1 1

Output:

1
2
3
0 0 0
0 1 0
1 2 1

Note:

The number of elements of the given matrix will not exceed 10,000.
There are at least one 0 in the given matrix.
The cells are adjacent in only four directions: up, down, left and right.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from collections import deque
def main(matrix):
m,n = len(matrix),len(matrix[0])
q = deque()
for i in range(m):
for j in range(n):
if matrix[i][j] != 0:
matrix[i][j] = 20000
else:
q.append((i,j))

while q:
x,y = q.popleft()
for r,c in ((x-1,y),(x,y-1),(x,y+1),(x+1,y)):
z = matrix[x][y] + 1
if 0<=r<m and 0<=c<n and matrix[r][c] > z:
matrix[r][c] = z
q.append((r,c))
return matrix