leetcode 1162. 地图分析(bfs)

Posted wz-archer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 1162. 地图分析(bfs)相关的知识,希望对你有一定的参考价值。

你现在手里有一份大小为 N x N 的『地图』(网格) grid,上面的每个『区域』(单元格)都用 0 和 1 标记好了。其中 0 代表海洋,1 代表陆地,你知道距离陆地区域最远的海洋区域是是哪一个吗?请返回该海洋区域到离它最近的陆地区域的距离。

我们这里说的距离是『曼哈顿距离』( Manhattan Distance):(x0, y0) 和 (x1, y1) 这两个区域之间的距离是 |x0 - x1| + |y0 - y1| 。

如果我们的地图上只有陆地或者海洋,请返回 -1。

 

示例 1:

 

输入:[[1,0,1],[0,0,0],[1,0,1]]
输出:2
解释:
海洋区域 (1, 1) 和所有陆地区域之间的距离都达到最大,最大距离为 2。
示例 2:

 

输入:[[1,0,0],[0,0,0],[0,0,0]]
输出:4
解释:
海洋区域 (2, 2) 和所有陆地区域之间的距离都达到最大,最大距离为 4。
 

提示:

1 <= grid.length == grid[0].length <= 100
grid[i][j] 不是 0 就是 1

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/as-far-from-land-as-possible

class Solution {
public:
    int maxDistance(vector<vector<int>>& a) {
        int x[4]={0,0,1,-1};
        int y[4]={1,-1,0,0};
        int n,m,num=0;
        n=a.size();
        if(n>0)m=a[0].size();
        queue<int>s;
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                if(a[i][j]==1){
                    s.push(i*m+j);
                }
            }
        }
        while(!s.empty()){
            for(int i=0;i<4;i++){
                int x1=s.front()/m;
                int y1=s.front()%m;
                x1+=x[i];
                y1+=y[i];
                if(x1>=0&&x1<n&&y1>=0&&y1<m&&a[x1][y1]==0){
                    a[x1][y1]=a[s.front()/m][s.front()%m]+1;
                    num=max(num,a[x1][y1]);
                    s.push(x1*m+y1);
                }
            }
            s.pop();
        }
        return num-1;
    }
};

 

以上是关于leetcode 1162. 地图分析(bfs)的主要内容,如果未能解决你的问题,请参考以下文章

leetcode 1162. 地图分析

c_cpp 1162.地图分析

LeetCode 1765地图中的最高点[BFS] HERODING的LeetCode之路

P1162(BFS)

Luogu P1162 填涂颜色(bfs)

洛谷 P1162 填充颜色 (BFS)