码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode 1162. 地图分析(bfs)

时间:2020-03-29 18:07:14      阅读:73      评论:0      收藏:0      [点我收藏+]

标签:单元   解释   for   pop   ssi   att   style   ++   分析   

你现在手里有一份大小为 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)

标签:单元   解释   for   pop   ssi   att   style   ++   分析   

原文地址:https://www.cnblogs.com/wz-archer/p/12593627.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!