关于最长路

首先我们要明白只有有向无环图(DAG)才有最长路
最近在重新看到最长路,总是能看到各种说法说SPFA,Floyd,Dijkstra等能做最短路,比如修改个符号,或者初始化时加个负号,但是前提是这个图必须是有向无环图。
在这个前提下,我们使用Floyd,SPFA都可以求最长路,我们给每个边加一个负号,求出的结果取个相反数就行。
但是!普通的Dijkstra并不能简单修改(简单修改是指修改更新条件的符号,初始化dis的值,或者键图是键负边)后正确求出最长路
https://www.cnblogs.com/gray035/archive/2013/03/21/2973902.html:
Dijkstra最长路没有子结构,子段最长不一定总的最长。如此图:

我们求1到其余各点的距离时,第一步:最长的是1->4=3我们将4标记并对其余顶点进行松弛,此时1到4的最长路就不会再更新了,即1->4的最长路为3.可是观察发现1到4的最长路为1->2->3->4为1+2+3=6;


有人说取出最大的边max,让所有边减去max,再跑Dijkstra最短路,结果取反。由上图,此法也并不科学。

本博客如有错误欢迎指出。

猜你喜欢

转载自www.cnblogs.com/xuanmaiboy/p/12117026.html