多源BFS

作者: rensgf | 来源:发表于2020-04-13 10:53 被阅读0次

1162. 地图分析
你现在手里有一份大小为 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

class Solution {
public:
    int maxDistance(vector<vector<int>>& grid) {
        int flag=0,a,b;
        int n=grid.size();
        queue<pair<int,int>> q;
// 周围四个点

        int x[4]={1,-1,0,0};

        int y[4]={0,0,1,-1};

//先找到陆地,入队

        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                if(grid[i][j]==1)
                q.push({i,j});
            }
        }
//遍历陆地周围一圈,如果是海洋,则将值变为与陆地的距离,入队,继续遍历它地一圈。最后找到的海洋一定是距离所有陆地最远的,也是最后一个出队的。
        while(!q.empty())
        {
            pair<int,int> temp=q.front();
            q.pop();
            a=temp.first;
            b=temp.second;
            for(int k=0;k<4;k++)
            {
                if(a+x[k]>=n||a+x[k]<0||b+y[k]>=n||b+y[k]<0||grid[a+x[k]][b+y[k]]!=0)
                continue;
                grid[a+x[k]][b+y[k]]=grid[a][b]+1;
                q.push({a+x[k],b+y[k]});
                flag=1;
            }
        }
        if(flag==0||grid.empty())
        return -1;
        return grid[a][b]-1;
    }
};

994. 腐烂的橘子
在给定的网格中,每个单元格可以有以下三个值之一:
值0代表空单元格;
值1代表新鲜橘子;
值2代表腐烂的橘子。
每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂。
返回直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回-1。


542. 01 矩阵
给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。
两个相邻元素间的距离为 1 。

相关文章

  • 多源BFS

    1162. 地图分析你现在手里有一份大小为 N x N 的『地图』(网格)grid,上面的每个『区域』(单元格)都...

  • 第七讲-图(中)

    最短路径 问题分类:单源,多源 无权图的单源最短路径用bfs就可以解决。按照递增(非递减)的顺序找出从源到各个定点...

  • BFS 不能找到最短路径,除非是无权重的图

    BFS(广度优先遍历)在一般的带权图中是不能解决最短路问题,了解BFS的都知道,BFS是根据节点到源节点之间的节点...

  • 图◆最短路 |BFS、 Dijkstra、Floyd、Bellm

    无权图 单源最短路 BFS带权图 单源最短路 Dijkstra O(V*logV + E)任意两个顶点间的最短路 ...

  • 542. 01 矩阵、1162. 地图分析、994. 腐烂的橘子

    本次的三道题都用了多源点BFS的方法,关于什么是多源点BFS呢,就是求很多个起点到一个终点的关系,就将终点入队,反...

  • 走迷宫(BFS例题)

    BFS例题---走迷宫 BFS对应数据结构queue BFS算法时间复杂度O(n^2) BFS算法不走走过的点 的...

  • 图论小结

    图的存储 邻接矩阵 邻接表 图的遍历 DFS(双向DFS) BFS(剪枝) 单源最短路径算法 dij 条件:无负权...

  • 什么时候用BFS,什么时候用DFS

    参考什么时候用dfs,什么时候用bfs 参考什么时候用DFS,什么时候用BFS? BFS的缺点适用情况 BFS的一...

  • Binary Tree(2)

    BFS vs DFS for Binary Tree What are BFS and DFS for Binar...

  • BFS/DFS python模板与实现

    BFS BFS在搜索完第k层的节点之前,是不会搜索第k+1层的节点的。 BFS原理 BFS所用的是队列。把每个还没...

网友评论

      本文标题:多源BFS

      本文链接:https://www.haomeiwen.com/subject/lbxgmhtx.html