2016 - 2024

感恩一路有你

floyd算法步骤详解 迪杰斯特拉算法为什么不能有负权边?

浏览量:2804 时间:2021-03-13 05:27:00 作者:admin

迪杰斯特拉算法为什么不能有负权边?

你错了吗?单源最短路径Dijkstra算法从当前的最小路径长度开始,逐渐增加,不再返回,因此不能有负的边权。如果它有负的边权,它自然使用Bellman算法另一种替代方法是Floyd算法。后两种算法的前提是不存在负权环。因为Kruskal算法是寻找最小生成树,边权为负时没有问题

现在最常用的最短路径算法是Dijkstra。它的使用条件是你可以写,并且在图中没有负权边。SPFA是目前稀疏图中最常用的最短路径算法,并且没有负循环,需要能够编写Floyd。它是从多个源中寻找最短路径最常用的算法。对于程序ape,Dijkstra对于OIer来说是非常简单的,只要它不是稠密图,就一定要写SPFA,因为SPFA在稀疏图上太快了

元素的最短路径:

1。如果稀疏图没有负权环,我们可以使用SPFA,时间复杂度O(km)

m是边数,K是平均队列数

2。如果稠密图没有负权环,我们推荐Dijkstra如果有负权环,可以试试Floyd,O(n^3)

任意两点的最短路径:Floyd最好实现,基于Johnson(high efficiency of sparse graph)的重新标记也很好

具体的程序可以在线查看

由于Dijkstra贪心,他总是找到一个最接近源点(Dmin)的点,然后将距离确定为从该点到源点的最短路径(d[i]<--Dmin);但是如果有一个负权重边,可以先传递一个离源点不最近的子优势(Dmin”),然后传递负权重边L(L<0)使路径之和变小(Dmin”),这样Dijkstra就会丢失。

例如,n=3,邻接矩阵:

0,3,4

3,0,-2

4,-2,0

使用Dijkstra得到d[1,2]=3,实际上,d[1,2]=2,这使得路径通过1-3-2递减。

floyd算法步骤详解 floyd算法求最短路径 floyd算法例题

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。