弗洛伊德(Floyd)算法(考虑的是各点之间的最短路径)
(时间复杂度为:O{n3} )
虽然求各点之间的最短路径可以这样做:循环把每个顶点都当成一次源点来运行一次Djkstra,算法复杂度也是O{n3} ,但是代码冗余。
重要思想:两点之间的距离无非是直接从这个点到另一个点或者是从这个点经过某些点再到另一个点。
Floyd:
总体思想:用当前顶点间(Vi~Vj)距离值与这两个顶点通过某个顶点(0~n个顶点循环)到达彼此的(Vi~Vk~Vj)距离值作比较。
定义两个二维数组:
1、数组D[][]代表顶点到顶点的最短路径权值和的矩阵;
2、数组P[][]代表对应顶点的最小路径的前一步经过的顶点(即前驱顶点)的矩阵。
D[][]更新的方法是:
D

本文介绍了Floyd算法,一种用于找出图中所有顶点间最短路径的算法,其时间复杂度为O(n^3)。相比通过多次Dijkstra算法的实现,Floyd算法减少了代码冗余。该算法的核心思想是比较两点之间直接连接的距离与经过第三个点的路径长度,不断更新顶点间的最短路径。同时,文章还讨论了如何使用两个二维数组D[][]和P[][]记录最短路径的权值和及前驱顶点。
最低0.47元/天 解锁文章
9513

被折叠的 条评论
为什么被折叠?



