数据结构之图--最短路径(弗洛伊德(Floyd)算法)

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

弗洛伊德(Floyd)算法(考虑的是各点之间的最短路径)

时间复杂度为:O{n3
        虽然求各点之间的最短路径可以这样做:循环把每个顶点都当成一次源点来运行一次Djkstra,算法复杂度也是O{n3} ,但是代码冗余。

重要思想:两点之间的距离无非是直接从这个点到另一个点或者是从这个点经过某些点再到另一个点。

Floyd:

    总体思想:用当前顶点间(Vi~Vj)距离值与这两个顶点通过某个顶点(0~n个顶点循环)到达彼此的(Vi~Vk~Vj)距离值作比较。

定义两个二维数组:

    1、数组D[][]代表顶点到顶点的最短路径权值和的矩阵;

    2、数组P[][]代表对应顶点的最小路径的前一步经过的顶点(即前驱顶点)的矩阵。


D[][]更新的方法是:

    D

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值