Leetcode-1162. As Far from Land as Possible 地图分析 (BFS) -python

题目

你现在手里有一份大小为 N x N 的「地图」(网格) grid,上面的每个「区域」(单元格)都用 0 和 1 标记好了。其中 0 代表海洋,1 代表陆地,请你找出一个海洋区域,这个海洋区域到离它最近的陆地区域的距离是最大的。
我们这里说的距离是「曼哈顿距离」( Manhattan Distance):(x0, y0) 和 (x1, y1) 这两个区域之间的距离是 |x0 - x1| + |y0 - y1| 。
如果我们的地图上只有陆地或者海洋,请返回 -1。
链接:https://leetcode.com/problems/as-far-from-land-as-possible/

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:

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.

思路及代码

BFS
class Solution:
    def maxDistance(self, grid: List[List[int]]) -> int:
        # 从1开始出发bfs,记录距离
        m = len(grid)
        n = len(grid[0])
        start = []
        # 存入所有起点1的位置
        for i in range(m):
            for j in range(n):
                if grid[i][j]:
                    start.append([i,j,0])
        # 特例
        if not start or len(start) == m*n:
            return -1
        
        # 四个方向
        x = [1,0,-1,0]
        y = [0,1,0,-1]
        while start:
            i, j, dis = start.pop(0)
            for k in range(4):
                row = i + x[k]
                col = j + y[k]
                if row < 0 or col < 0 or row == m or col == n or grid[row][col]:
                    continue
                start.append([row,col,dis+1])
                grid[row][col] = 1 #访问过的位置记录为1
        return dis #最后一个dis

复杂度

T = O ( m n ) O(mn) O(mn)
S = O ( m n ) O(mn) O(mn)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值