1- class Solution ( object ) :
2- def wallsAndGates (self , rooms ) :
1+ class Solution :
2+ def wallsAndGates (self , rooms : List [ List [ int ]]) -> None :
33 """
4- :type rooms: List[List[int]]
5- :rtype: None Do not return anything, modify rooms in-place instead.
4+ Do not return anything, modify rooms in-place instead.
65 """
76 from collections import deque
7+ 88 if not rooms or not rooms [0 ]:
99 return rooms
10- m , n = len (rooms ), len (rooms [0 ])
11- dx = [1 , - 1 , 0 , 0 ]
12- dy = [0 , 0 , 1 , - 1 ]
1310 INF = 2147483647
14- queue = deque ()
15- def bfs (queue ):
16- while queue :
17- pos = queue .popleft ()
18- x0 , y0 = pos
19- 20- for k in range (4 ):
21- x = x0 + dx [k ]
22- y = y0 + dy [k ]
23- if 0 <= x < m and 0 <= y < n and rooms [x ][y ] == INF :
24- rooms [x ][y ] = rooms [x0 ][y0 ] + 1
25- queue .append ((x , y ))
26- 11+ 12+ m , n = len (rooms ), len (rooms [0 ])
13+ queue = deque () # (x_pos, y_pos, step from a gate)
2714 for i in range (m ):
2815 for j in range (n ):
29- if rooms [i ][j ] == 0 : #ÏÖÔÚ ́ÓÿÉÈÃÅ3ö·¢
30- queue .append ((i , j ))
31- bfs (queue )
32- return rooms
16+ if rooms [i ][j ] == 0 :
17+ queue .append ((i , j , 0 ))
18+ 19+ dx = [1 , - 1 , 0 , 0 ]
20+ dy = [0 , 0 , 1 , - 1 ]
21+ while queue :
22+ x_pos , y_pos , step = queue .popleft ()
23+ for k in range (4 ):
24+ x = x_pos + dx [k ]
25+ y = y_pos + dy [k ]
26+ 27+ if 0 <= x < m and 0 <= y < n and rooms [x ][y ] == INF :
28+ rooms [x ][y ] = step + 1
29+ queue .append ((x , y , step + 1 ))
0 commit comments