最短路径 Floyd && spfa

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最短路径 Floyd && spfa相关的知识,希望对你有一定的参考价值。

floyd算法是一个很强大的算法,它可以计算任意两点之间的最短路径,其边可以为负值。
时间复杂度n^3

技术分享
 1 void floyd()
 2 {
 3     int k,u,v;
 4     for(k=0;k<G.vunm;k++)
 5         for(u=0;u<G.vunm;u++)
 6             for(v=0;v<G.vunm;v++)
 7             {
 8                 if(D[u][v]>D[u][k]+D[k][v])
 9                 {
10                     D[u][v]=D[u][k]+D[k][v];
11                 }
12             }
13     printf("%d\n",D[s][t]==MAX?-1:D[s][t]);
14 }
Floyd 模板

 

 

补充一下:对于floyd判断负环是否存在只需检查是否存在d[i][i]是负数的顶点i 即可

以上是关于最短路径 Floyd && spfa的主要内容,如果未能解决你的问题,请参考以下文章

a*算法求最短路径和floyd还有dijsktra算法求最短路径的区别?

OSPF & BGP

最短路径之Floyd算法

多源最短路径--Floyd-Warshall算法

最短路径之--floyd算法--多源最短路径

图论之最短路径floyd算法