1. 问题:
在最短路径问题中,如果源点有多个,我之前的做法可能都是遍历这n个源点
2. 背景题目
leetcode题目:大致意思如下
给定一个 01 矩阵 mat,输出一个大小相同的矩阵,其中每一个格子是 mat 中对应位置元素到最近的 0 的距离。
(斜对角的距离是2)
(简单理解就是地图上陆地每个位置到海洋的最短距离)
2.1之前的思考
遍历这个二维矩阵呗,对每个1进行一次BFS,求最短路径
但后来发现,假设有个A位置,则这个A可能不止一次的要被BFS访问到,因为他可能出现在很多结点的BFS路径上(比如这个A是海边的一个结点)
2.2 问题的简化
如果海洋只有一个点的话,问题就可以倒过来想了,海洋到所有陆地的最短距离(单个源点)
2.3 超级源点(超级0)
而当海洋面积变大的时候(多个源点),可以考虑设置一个超级源点super0,他到所有海洋(0)的距离都是1,
这时候,这些0其实就相当于从超级源点开始BFS后的第一步
这时候,每一个陆地(1)就只用被bFS跑一次了
并且,更重要的是,避免了多次使用BFS时遍历标记位的复杂考虑,总不能每个顶点都重置一次标记矩阵吧。。
2.4 具体实施
所有的0都相当于超级0进行BFS时的第一层,就直接double fori把所有0都压到队列里就ok了,然后一切照旧
标签:路径,海洋,超级,源点,矩阵,最短,BFS,遍历 来源: https://www.cnblogs.com/yinghuoweiguang/p/15799531.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。