当前位置: 首页 > news >正文

【多源 BFS】1. 01 矩阵(medium)

多源 BFS

  • 多源最短路问题简介
  • 1. 01 矩阵(medium)
    • 题⽬描述:
    • 解法(bfs)(多个源头的最短路问题)
      • 算法思路:
    • 算法代码:

多源最短路问题简介

在这里插入图片描述

1. 01 矩阵(medium)

题⽬链接:542. 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 <= 104
1 <= m * n <= 104
mat[i][j] is either 0 or 1.
mat 中⾄少有⼀个 0

解法(bfs)(多个源头的最短路问题)

在这里插入图片描述

算法思路:

对于求的最终结果,我们有两种⽅式:
• 第⼀种⽅式:从每⼀个 1 开始,然后通过层序遍历找到离它最近的 0 。
这⼀种⽅式,我们会以所有的 1 起点,来⼀次层序遍历,势必会遍历到很多重复的点。并且如果矩阵中只有⼀个 0 的话,每⼀次层序遍历都要遍历很多层,时间复杂度较⾼。
• 换⼀种⽅式:从 0 开始层序遍历,并且记录遍历的层数。当第⼀次碰到 1 的时候,当前的层数就是这个 1 离 0 的最短距离。
这⼀种⽅式,我们在遍历的时候标记⼀下处理过的 1 ,能够做到只⽤遍历整个矩阵⼀次,就能得到最终结果。
但是,这⾥有⼀个问题, 0 是有很多个的,我们怎么才能保证遇到的 1 距离这⼀个 0 是最近的呢?
其实很简单,我们可以先把所有的 0 都放在队列中,把它们当成⼀个整体,每次把当前队列⾥⾯的所有元素向外扩展⼀次。

算法代码:

class Solution
{int[] dx = {0, 0, -1, 1};int[] dy = {1, -1, 0, 0};public int[][] updateMatrix(int[][] mat) {int m = mat.length, n = mat[0].length;// dist[i][j] == -1:标记当前位置没有被搜索过// dist[i][j] != -1:存的是最短距离int[][] dist = new int[m][n];for(int i = 0; i < m; i++)for(int j = 0; j < n; j++)dist[i][j] = -1;Queue<int[]> q = new LinkedList<>();// 1. 把所有的源点加⼊到队列⾥⾯for(int i = 0; i < m; i++)for(int j = 0; j < n; j++){if(mat[i][j] == 0){dist[i][j] = 0;q.add(new int[]{i, j});}}// 2. ⼀层⼀层的往外扩while(!q.isEmpty()){int[] t = q.poll();int a = t[0], b = t[1];for(int i = 0; i < 4; i++){int x = a + dx[i], y = b + dy[i];if(x >= 0 && x < m && y >= 0 && y < n && dist[x][y] == -1){dist[x][y] = dist[a][b] + 1;q.add(new int[]{x, y});}}}return dist;}
}
http://www.dtcms.com/a/597047.html

相关文章:

  • 物联网工控一体机操作系统选型:安卓、Ubuntu、Debian 场景化决策指南
  • 【代码审计】RuoYi-4.2 五处安全问题分析
  • 如何制作自己的网站并且插口代码wordpress .htaccess 伪静态
  • 【openGauss】谈一谈openGauss对Oracle中lob类型的兼容情况
  • 【自然语言处理】WordNet与知网:支撑自然语言理解的词汇知识库双璧
  • 怎么自己弄一个网站编程课程收费标准
  • Vue 项目实战《尚医通》,登录组件获取验证码,笔记25
  • 【无标题】六边形拓扑量子计算:NP完全问题的统一解决框架
  • IDEA下载
  • 网站自己做需要多少钱中国住建部和城乡建设部
  • 电磁波传播理论的数学描述和python模拟
  • 符合网络营销网站建设郑州威盟网站建设公司怎么样
  • 金阊企业建设网站公司wordpress教程cms
  • 李沐深度学习笔记D3-基础的优化方法
  • 【MCP:七千字图文详解】从灵感闪现到生态确立,全链路解读与实战
  • GitHub 热榜项目 - 日榜(2025-11-11)
  • OpenCV图像亮度与对比度调整
  • 应急响应基础
  • jsp技术做网站有什么特点免费软件下载网站入口正能量
  • WSL2下Ubuntu20.04图形化环境配置
  • Ubuntu单用户
  • h5制作网站哪个好杭州做网站的公司
  • 软装设计师常用网站英文网站建设一般多少钱
  • 数据结构之顺序表(动态)
  • Prover9/Mace4 的形式化语言简介
  • CSDN文章如何转出为PDF文件保存
  • 多级缓存解决方案
  • C++ 二分查找(Binary Search):从原理到实战的全面解析
  • Synbo Protocol 受邀出席ETHShanghai 2025,以共识机制重构链上融资生态
  • 软考 系统架构设计师历年真题集萃(198)—— 2025年11月系统架构设计师真题1