【多源 BFS】地图分析
文章目录题目解析方向向量算法原理细节问题层序遍历代码实现题目链接1162. 地图分析题目解析多源点最短路问题指的是多个单源点最短路问题。对于单源点最短路问题是只有一个起点和一个终点的而对于多源点最短路问题是有多个起点和一个终点。而多源 BFS则指的是用 BFS 解决边权为 1 的多源点最短路问题。对于这类问题通常是将所有起点看作一个“超级源点”然后问题就变成只有一个起点(超级源点) 和一个终点的单源点最短路问题了。然后使用一次 BFS 即可解决问题。具体的步骤先将所有的起点加入队列中等同于将超级源点加入队列逐层往外扩展题目给出一个大小n x n的网格grid上面的每个单元格都用0和1标记0代表海洋1代表陆地。我们需要找出一个海洋单元格该单元格离它最近陆地单元格的距离最大然后返回这个最大的距离。如果网格上只有陆地或者海洋就返回-1。这里的距离指的是曼哈顿距离举例点x1y1和点x2y2的距离为|x1 - x2| |y1 - y2|例1grid [[1,0,1],[0,0,0],[1,0,1]]101000101dist 矩阵010121010输出2例2grid [[1,0,0],[0,0,0],[0,0,0]]100000000dist 矩阵012123234输出4方向向量在继续之前有必要知道我们在解决矩阵搜索类问题时访问某位置上下左右四个方向的操作。坐标〖i, j〗的上下左右四个坐标是在i和j加上了 0、1、-1 上下坐标〖i (-1), j 0〗和〖i 1, j 0〗左右坐标〖i 0, j (-1)〗和〖i 0, j 1〗。因此需要定义两个向量坐标dx {0, 0, -1, 1}dy {-1, 1, 0, 0}。在需要访问时通过 〖row, col〗坐标和四次循环依次访问即可。算法原理本题从陆地入手先遍历原矩阵找到陆地(1)并将其在dist 距离矩阵中的对应值改为0并放入队列然后以dist 距离矩阵中的陆地(0)为起点进行 多源 BFS 即可从起点开始逐层扩展并将扩展后的值也放入队列在层序遍历的时候边扩展边记录最大的距离值返回结果细节问题我们对于最终返回的距离矩阵dist做以下操作初始化其所有值为 -1表示该位置未被访问过若某位置的值不为 -1 则说明已被访问过每一个位置的值不为 -1都表示最短距离同时也是扩展的层数在层序遍历的时候只需要通过当前位置在距离数组中对应位置的值再1就可以实现结果的更新层序遍历我们使用一个队列实现层序遍历的操作队列存储起始位置和与其上下左右相邻位置的坐标当队列不为空时一直取出队首元素获取坐标然后根据坐标向该元素的上下左右四个方向访问查找符合条件的方格坐标合法且未被访问过找到符合条件的方格之后从距离矩阵dist中取出与队首元素坐标对应位置的值再1然后将值存入当前访问位置在距离矩阵dist中的对应位置再将这个值放入队列当队列为空层序遍历完毕代码实现classSolution{publicintmaxDistance(int[][]grid){// 初始化intmgrid.length,ngrid[0].length;Queueint[]queuenewArrayDeque();int[]dx{0,0,-1,1};int[]dy{-1,1,0,0};int[][]distnewint[m][n];for(int[]arr:dist){Arrays.fill(arr,-1);// 将dist矩阵中的值初始化为-1,表示未被访问过}// 先遍历矩阵找到陆地for(inti0;im;i){for(intj0;jn;j){if(grid[i][j]1){dist[i][j]0;// 将距离矩阵中对应位置的值设置为0queue.offer(newint[]{i,j});// 放入队列}}}// 层序遍历intmaxDist-1;while(!queue.isEmpty()){int[]topqueue.poll();introwtop[0],coltop[1];for(intk0;k4;k){intxrowdx[k],ycoldy[k];if(x0xmy0yndist[x][y]-1){dist[x][y]dist[row][col]1;queue.offer(newint[]{x,y});maxDistMath.max(maxDist,dist[x][y]);}}}// 返回结果returnmaxDist;}}完

相关新闻

软件测试5 测试分类

软件测试5 测试分类

📑目录(俏皮版) 🤔为啥测试要搞这么多分类?🎯按测试目标分:我们要测软件哪些方面? 2.1 UI 界面测试|软件的 “颜值质检员”2.2 功能测试|软件会不会干活2.3 性…

2026/10/10 21:39:16 阅读更多 →
【C++ 手写 STL 容器】手撕 list 双向循环链表|迭代器模板复用 + 反向迭代器适配器 庖丁解牛

【C++ 手写 STL 容器】手撕 list 双向循环链表|迭代器模板复用 + 反向迭代器适配器 庖丁解牛

1. 整体架构预览STL std::list底层是带头结点双向循环链表。 难点不在于链表增删节点,而在迭代器封装:原生指针Node*不符合迭代器规范,需要封装迭代器类。为了避免普通迭代器、const 迭代器写两份几乎完全一样的代码,我们利用模板…

2026/10/11 3:29:20 阅读更多 →
指针妙用:从数组到字符串的灵活操作

指针妙用:从数组到字符串的灵活操作

指针如果要传的类型和指针的类型不匹配,则强转例:int a 10;char *p (char *)&a;指针——整型一维数组int a[10] {1,2,3,4};int *p &a[0]; a; 指针——字符型一维数组--主要用来存放字符串 局部作用域的一个数组 char s[] "hello";…

2026/10/10 20:32:54 阅读更多 →

最新新闻

JavaWeb简易购物车实战:基于Session的内存购物车实现与避坑指南

JavaWeb简易购物车实战:基于Session的内存购物车实现与避坑指南

简介:这是一套基于JavaWeb技术实现的简易购物车系统完整源码,适合Java初学者及希望巩固Web开发基础的中级开发者。代码围绕Servlet与JSP、Session会话管理、JDBC数据库交互、MVC设计模式、JSTL与EL表达式等核心知识点展开,覆盖商品展示、加入…

2026/10/11 4:22:10 阅读更多 →
Docker化CPLEX:解决线性规划求解器部署难题的完整指南

Docker化CPLEX:解决线性规划求解器部署难题的完整指南

简介:面向需要在容器环境集成 IBM ILOG CPLEX 求解器的 Java 开发者与运维人员,这份资源给出了基于 Docker 的 CPLEX 部署方案,解决本地安装依赖多、迁移困难的问题,尤其适合将 CPLEX 运行时组件嵌入应用或镜像的落地场景。资源共…

2026/10/11 4:22:10 阅读更多 →
Uniapp消息推送与热更新:从UniPush到wgt资源包的跨端实践

Uniapp消息推送与热更新:从UniPush到wgt资源包的跨端实践

聊一个我最近一直在折腾的项目:Uniapp 框架里面的消息推送与热更新。这两个能力看起来一个管“触达用户”、一个管“更新代码”,八竿子打不着,但实际做起来你会发现它们就是跨端 App 后台运营的核心两条腿,缺一条都跑不顺畅。这篇…

2026/10/11 4:22:10 阅读更多 →
AI编程8实战工作流:TaoToken统一Key下的模型搭配与效率对比

AI编程8实战工作流:TaoToken统一Key下的模型搭配与效率对比

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 4:22:10 阅读更多 →
企业查询系统源码 工商信息查询+会员套餐+后台管理

企业查询系统源码 工商信息查询+会员套餐+后台管理

企业查询系统是一套可自建的企业信息查询平台源码,功能对标企查查、天眼查这类工商信息查询站,分前台查询与后台管理两部分。 源码下载: https://download.csdn.net/download/m0_61505785/93598872?spm1001.2014.3001.5503 更多同类源码分…

2026/10/11 4:22:10 阅读更多 →
用 OpenLogi 给罗技鼠标重映射按键:一份本地 config.toml 免费搞定全部设置

用 OpenLogi 给罗技鼠标重映射按键:一份本地 config.toml 免费搞定全部设置

用 OpenLogi 给罗技鼠标重映射按键:一份本地 config.toml 免费搞定全部设置 【免费下载链接】OpenLogi ⚡️A native, local-first alternative to Logitech Options, written in Rust 🦀 — remap buttons, DPI, and SmartShift over HID. No account, …

2026/10/11 4:21:10 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →