【图论】Johnson全源最短路算法

news/2024/11/15 21:37:42/文章来源:https://www.cnblogs.com/chenzhekeai/p/18409005
·2024-9-11 ·最后更新时间 2024-9-11

作者学会了一个叫做\(Johnson\)的算法,所以就有了这篇博客......
Johnson算法是一个高效处理全源最短路的算法 其实也很慢,但目前是最高效的 为了更加方便你们接下来的学习我希望你们已经掌握了基本的最短路算法(SPFA,Dijsktra,Bellman-Ford,Floyd)如果没有掌握建先去学习一下qwq,

1.算法思路

我们知道通过Bellman-Ford我们可以在 \(O(n^2m)\) 的时间复杂度内求出两点之间的最短路,也可以通过类似动态规划的Floyd在 \(O(n^3)\) 的时间复杂度内求出两点最短路径,但是我们可以发现如果我们对于每个点跑一次 堆优化 Dijkstra最后的时间复杂度是 \(O(n*mlogn)\) 这是比Bellman-Ford算法要快的!!!但是,Dijkstra处理不了负边权啊,"那我们可以给所有边加上一个数字让他变成正数啊qwq" 什么时候蹿出来的 这个可能是大部分人第一时间的想法,但是并不如此,比如这样一个图:

\(1->2\) 的最短路显然是 \(1->5->3->2\)\(-2\)
但是当我们给所有边的边权都加上 \(5\) 最短路就变成了 \(1->4->2\) 这并不是我们想要的结果QAQ
那么有什么办法可以使得最后的最短路大小不变呢?
我们可以设一个超级源点并向其他所有点连一个长度为 \(0\) 的边:

然后求出所有点到 \(0\) 的最短路:

我们设最短路答案为 \(h_i\) 然后对于每条边我们让 \(w+h_i-h_j\) 就好啦qwq

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/795667.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

更新mstsc

这次遇到的问题是系统远程程序mstsc故障,又不想重装系统, 于是通过挂载windows的ISO,想获取system32下的原版程序和相关文件, 挂载ISO后,sources文件夹下有一install.wim文件,通过以下命令提取所有系统安装文件至E盘临时目录temp下 dism /mount-wim /wimfile:"G:\so…

MySQL原理之UUID主键分析,插入或更新语法分析

目录1 MySQL不能用UUID做主键1.1 前言1.2 mysql和程序实例1.2.1 准备工作1.2.2 开始测试1.2.3 程序写入结果1.2.4 效率测试结果1.3 使用uuid和自增id的索引结构对比1.3.1 自增id1.3.2 uuid1.4 自增id缺点1.5 雪花算法2 插入或更新2.1 on duplicate key2.1.1 定义2.1.2 values函…

图与网路——最大流问题精解

容量网络(Capacity Network)是一种特殊的有向图结构,其中每条边都有一个容量(Capacity),表示该边上可以通过的最大流量。在这种网络中,流量(Flow)是指从源点(Source)通过边到达汇点(Sink)的实际传输量。容量网络中的边具有方向性,且每条边的流量不能超过其容量。…

C++中的数组,字符串数组,pair数组

1.C++中的字符串数组: 2. C++中的常量数组 这个const pair<int, string> valueSymbols[]定义了一个常量数组,数组中的每个元素都是一个pair<int, string>类型的对象。pair是C++标准模板库(STL)中的一个模板类,用于将两个值组合成一个单一的对象。在这个特定的…

TensorFlow深度学习框架改进K-means、SOM自组织映射聚类算法及上海招生政策影响分析研究|附代码数据

全文链接:https://tecdat.cn/?p=37652 原文出处:拓端数据部落公众号 分析师:Chen Zhang在教育政策研究领域,准确评估政策对不同区域和学生群体的影响至关重要。2021 年上海市出台的《上海市初中学业水平考试实施办法》对招生政策进行了调整,其中名额分配综合评价模块的…

【python脚本】springboot检测脚本

原创 CatalyzeSecimport requests import urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) session = requests.session()# 从文本文件中读取 with open(dic.txt, r) as file:paths = file.readlines()# 移除每个末尾的换行符 paths = [path.str…

STM32学习笔记——中断

中断:在主程序运行过程中,出现了特定事件(例如发生已经预知的一些情况),从而转入中断程序中,处理完成后再回到主程序中继续执行。(频繁的中断函数会影响主程序的运行,所以中断函数一边不处理特别复杂的逻辑) EXTI(Extern Interrupt)外部中断 支持的触发方式:上升沿…

面试-JS Web API-DOM

概览DOM(Document Object Model)DOM是哪种数据结构? ---树🌳 常用的API attr和property区别 一次性插入多个DOM节点?DOM节点操作DOM节点的property 通过获取JS属性来改变样式or页面渲染形式。DOM节点的attribute 修改节点的属性。建议尽量用property操作。

送给测试行业朋友们的一些中肯建议

在快速发展的科技时代,软件测试行业也在不断变化。如果你是一名测试人员,或正在考虑进入这个行业,你是否感到迷茫?该如何提升自己,以应对未来的挑战?今天,我为所有测试行业的朋友们带来一些切实的建议,助你们走得更远。 作为测试人员,你是否经常面对需求变化、测试工具…