Given an N x N grid
containing only values 0
and 1
, where 0
represents water and 1
represents land, find a water cell such that its distance to the nearest land cell is maximized and return the distance.
The distance used in this problem is the Manhattan distance: the distance between two cells (x0, y0)
and (x1, y1)
is |x0 - x1| + |y0 - y1|
.
If no land or water exists in the grid, return -1
.
Example 1:
Input: [[1,0,1],[0,0,0],[1,0,1]] Output: 2 Explanation: The cell (1, 1) is as far as possible from all the land with distance 2.
Example 2:
Input: [[1,0,0],[0,0,0],[0,0,0]] Output: 4 Explanation: The cell (2, 2) is as far as possible from all the land with distance 4.
Note:
1 <= grid.length == grid[0].length <= 100
grid[i][j]
is0
or1
思路:从所有1的位置开始bfs
class Solution(object):
def maxDistance(self, grid):
"""
:type grid: List[List[int]]
:rtype: int
"""
n=len(grid)
vis=[[False for _ in range(n)] for _ in range(n)]
q,qq=[],[]
for i in range(n):
for j in range(n):
if grid[i][j]==1: q.append((i,j))
if not q: return -1
if len(q)==n*n: return -1
dirs=[[1,0],[-1,0],[0,1],[0,-1]]
step=0
while q:
while q:
i,j=q.pop()
for di,dj in dirs:
ii,jj=i+di,j+dj
if 0<=ii<n and 0<=jj<n and grid[ii][jj]==0 and not vis[ii][jj]:
vis[ii][jj]=True
qq.append((ii,jj))
step+=1
q,qq=qq,q
return step-1