多源广度优先搜索

阅读: 评论:0

多源广度优先搜索

多源广度优先搜索

01矩阵

给定一个由 0 和 1 组成的矩阵 mat ,请输出一个大小相同的矩阵,其中每一个格子是 mat 中对应位置元素到最近的 0 的距离。

两个相邻元素间的距离为 1 。

示例 1:

输入:mat = [[0,0,0],[0,1,0],[0,0,0]]
输出:[[0,0,0],[0,1,0],[0,0,0]]

示例 2:

输入:mat = [[0,0,0],[0,1,0],[1,1,1]]
输出:[[0,0,0],[0,1,0],[1,2,1]]

提示:
- m == mat.length n= mat[i].length
- 1 <= m , n <= 10^4
- 1 <= m * n <= 10^4
- mat[i][j] is either 0 or 1
- mat 中至少有一个 0

//多源广度优先搜索,类似于多源最短路径算法,从全部的0开始搜索
class Solution {
public:vector<vector<int>> updateMatrix(vector<vector<int>>& mat) {int n=mat.size(),m=mat[0].size();vector<vector<int>>dist(n,vector<int>(m));int book[10005][10005];queue<int>qx,qy;int dx[4]={0,0,1,-1};int dy[4]={1,-1,0,0};for(int i=0;i<mat.size();i++){for(int j=0;j<mat[0].size();j++){if(mat[i][j]==0){qx.push(i);qy.push(j);}}}while(!qx.empty()){for(int i=0;i<4;i++){int tx=qx.front()+dx[i];int ty=qy.front()+dy[i];if(tx>=0&&tx<n&&ty>=0&&ty<m&&mat[tx][ty]==1&&dist[tx][ty]==0){dist[tx][ty]=dist[qx.front()][qy.front()]+1;qx.push(tx);qy.push(ty);}}qx.pop();qy.pop();}return dist;}
};



腐烂的橘子

在给定的网格中,每个单元格可以有以下三个值之一:

值 0 代表空单元格;
值 1 代表新鲜橘子;
值 2 代表腐烂的橘子。
每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂。

返回直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1。

示例 1:

输入:[[2,1,1],[1,1,0],[0,1,1]]
输出:4

示例 2:

输入:[[2,1,1],[0,1,1],[1,0,1]]
输出:-1
解释:左下角的橘子(第 2 行, 第 0 列)永远不会腐烂,因为腐烂只会发生在 4 个正向上。

示例 3:

输入:[[0,2]]
输出:0
解释:因为 0 分钟时已经没有新鲜橘子了,所以答案就是 0 。

提示:
- 1 <= grid.length <= 10
- 1 <= grid[0].length <= 10
- grid[i][j] 仅为 0、1 或 2

//多源广度优先搜索
class Solution {
public:int orangesRotting(vector<vector<int>>& grid) {int n=grid.size(),m=grid[0].size();vector<vector<int>>minu(n,vector<int>(m));queue<int>qx,qy;int dx[4]={0,0,1,-1};int dy[4]={1,-1,0,0};int maxn=-15;for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(grid[i][j]==2){qx.push(i);qy.push(j);}}}while(!qx.empty()){for(int i=0;i<4;i++){int tx=qx.front()+dx[i];int ty=qy.front()+dy[i];if(tx>=0&&tx<n&&ty>=0&&ty<m&&grid[tx][ty]==1){grid[tx][ty]=2;qx.push(tx);qy.push(ty);minu[tx][ty]=minu[qx.front()][qy.front()]+1;}}qx.pop();qy.pop();}for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(grid[i][j]==1)return -1;maxn=max(maxn,minu[i][j]);}}return maxn;}
};

本文发布于:2024-02-01 02:57:05,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170672742733375.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:广度
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23