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

--- 多源bfs算法 01矩阵---

多源bfs和单源bfs最大的区别是 单源bfs是从一个固定起点开始进行搜索,而多元bfs是从多个点开始同时进行搜索,当第一次有一条路径到达了合适位置,那么他就是一条最近的路

经典多元bfs 01矩阵

题目要求是返回所有为1的位置于他最近的0的距离,那么就而数组中可能有多个1如果是一个一个的单源bfs,那时间复杂度就很恐怖了,所以可以使用多元bifs, 把所有的为1的位置给放到队列中,让后对他们统一出队列进行bfs搜索,可是这样就有了一个新的问题,再我从1开始进行搜索时,如果下一个为1,那么我当前1的最短距离应该取决于这个1的最短距离,而我并不能知道他的最短距离,所以储存1的位置行不通

那么我可以改为储存0的位置,那么再碰到有1时,那么这个1距离最近的位置就是1,并且在碰到被1包裹的1,那么也能通过他周围储存的最短距离来获取到最近的距离

对于多源bfs的编写,于单源不同的是只需要把所有需要遍历的点给预处理放到队列中就好,在bfs时,也不需要管是不是最近的,因为他们的步长相同,所以在第一次遇到,那么肯定是最近的路径

实现

  public int[][] updateMatrix(int[][] mat) {int m = mat.length;int n = mat[0].length;int[][] ret = new int[m][n];for (int i = 0; i < m; i++) {Arrays.fill(ret[i], -1);}Queue<int[]> queue = new LinkedList<>();for (int y = 0; y < m; y++) {for (int x = 0; x < n; x++) {if (mat[y][x] == 0) {queue.add(new int[]{y, x});ret[y][x] = 0;}}}int[] dy = new int[]{-1, 1, 0, 0};int[] dx = new int[]{0, 0, -1, 1};while (!queue.isEmpty()) {int[] poi = queue.poll();for (int j = 0; j < 4; j++) {int y = poi[0] + dy[j];int x = poi[1] + dx[j];if (y < 0 || y == m || x < 0 || x == n || ret[y][x] != -1 || mat[y][x] == 0) continue;ret[y][x] = ret[poi[0]][poi[1]] + 1;queue.add(new int[]{y, x});}}return ret;}

多源bfs的题还有

飞地的数量  地图中的最高点  地图分析 

http://www.dtcms.com/a/610216.html

相关文章:

  • 绵阳做网站网站底部的备案信息
  • bash和命令
  • 游戏微网站模板网站使用条款模板
  • asp.net网站建设成都app定制公司
  • 如何添加网站白名单互联网论坛
  • 如何从 PDF 中删除页面
  • 第28集科立分板机:科立自动化分板机适配多场景生产筑牢电子制造品质防线
  • 网站开发实训开发区网站制作公司
  • 网站开发毕业设计任务书范文圆通速递我做网站
  • 电子商务网站建设及管理南昌net网站开发
  • 「边打字边开挂」:一个 AutoHotkey 实时翻译输入器的诞生记
  • Spring Boot 3.x 系列【3】Spring Initializr快速创建Spring Boot项目
  • 中非经贸合作的岳阳力量
  • 官网网站建设需求wordpress dante 下载
  • 全flash网站模板网站建设备案需要材料
  • Ntp时间同步
  • ⸢ 拾陆-Ⅰ⸥⤳ 安全数智化建设:安全运营中心(SOC)
  • 公益网站建设那家好网站的统计 怎么做
  • 亚马逊巴西加码物流网络,计划新建100个配送中心
  • 长沙做网站微联讯点不错信息手机网站模板下载安装
  • Java MySQL 连接
  • 误分区数据恢复:3种方法,按需选择更高效
  • 怎么给公司做网站推广工程建设领域专项治理工作网站
  • cronet的一些资料
  • Tomct面试题(15道含答案)
  • Java:Arrays类使用
  • fineftp-server: 轻量级C++跨平台FTP服务器解决方案
  • Java EE --JUC
  • 如何检测网站开发商留有后门wordpress编辑无效
  • 网站平台建设的实训报告双鸭山网站开发