用C++做全国交通资讯课设,计算最短路径的算法用Dijkstra好,还是用Floy好,但是图采用的是邻接表存储!

2025-03-10 07:54:25
推荐回答(3个)
回答1:

>>全国交通咨询?
作为一个OIer、我表示对最短路径算法稍有研究。
Dijkstra和Floyd是按需要来看的
首先
dijkstra求的是从一个节点到其他节点的最短路 时间复杂度不优化的情况下是n方
Floyd求的是任意两点间的最短路径、时间复杂度永远是n的立方、而且我表示除了邻接矩阵我再没用其他数据结构写过。
所以在处理很多的结点很多边的时候、Floyd又耗费时间又浪费空间、没有特殊需要不要用。
至于dijkstra、在稀疏图里它一定比SPFA快
>>SPFA是另一种最短路算法、是Bellman-Ford的队列优化
但是对于稠密图、SPFA要比dijkstra快很多。
但是、dijkstra可以用堆优化
用小根堆来维护dijkstra中的dist数组、在每次取最小值的时候取堆顶元素
这样时间复杂度是nlogn级、很快
至于SPFA跟Heapdijkstra哪个快这个不大好比较= =、

OTZ回答的有点跑偏了。
注意最开始的那几行
我强烈推荐dijkstra、Floyd如果不求任意两点的最短路径的话根本没必要。

回答2:

看需要,floyd一般是做所有点之间的最短路的,dijkstra是做单点出发的最短路的
邻接表的话一般用dijkstra比较方便

回答3:

应该是Floy好一点,个人觉得