You are given an m x n
grid rooms
initialized with these three possible values.
-1
A wall or an obstacle.0
A gate.INF
Infinity means an empty room. We use the value231 - 1 = 2147483647
to representINF
as you may assume that the distance to a gate is less than2147483647
.
Fill each empty room with the distance to its nearest gate. If it is impossible to reach a gate, it should be filled with INF
.
Example 1:
Input: rooms = [[2147483647,-1,0,2147483647],[2147483647,2147483647,2147483647,-1],[2147483647,-1,2147483647,-1],[0,-1,2147483647,2147483647]] Output: [[3,-1,0,1],[2,2,1,-1],[1,-1,2,-1],[0,-1,3,4]]
Example 2:
Input: rooms = [[-1]] Output: [[-1]]
Constraints:
m == rooms.length
n == rooms[i].length
1 <= m, n <= 250
rooms[i][j]
is-1
,0
, or231 - 1
.
class Solution:
def wallsAndGates(self, rooms: List[List[int]]) -> None:
"""
Do not return anything, modify rooms in-place instead.
"""
def dfs(x,y,path):
if x<0 or y<0 or x>=len(rooms) or y>=len(rooms[0]):return
if rooms[x][y]==-1:return
if path!=0 and rooms[x][y]<=path:return
rooms[x][y]=path
dfs(x-1,y,path+1)
dfs(x+1,y,path+1)
dfs(x,y-1,path+1)
dfs(x,y+1,path+1)
for x in range(len(rooms)):
for y in range(len(rooms[0])):
if rooms[x][y]==0:
dfs(x,y,0)