Floyd最短路算法

简介

Floyd算法,通过中转点来更新两点之间的最短距离。与Dijkstra等算法不同,他们是求一个点到其他各点的最短路径,而Floyd算法可以求任意2点的最短距离。

算法步骤

1.将读入的边放到二维数组上,如果两点之间有边相连,那么两点之间的距离就是边的权值,否则设为无穷大。
2.枚举中转点k,对于任意两个点i,j(i<>j<>k),看看能不能通过k来更新i,j两点的最短距离,如果可以,那么当且仅当dis[i,j]>dis[i,k]+dis[k,j]。
3.做完之后,答案就是这个二维数组了。

代码

最核心的代码只有5行:

for k:=1 to n do
    for i:=1 to n do
        for j:=1 to n do
            if (dis[i,j]>dis[i,k]+dis[k,j])  then dis[i,j]:=dis[i,k]+dis[k,j];

复杂度及优缺点

时间复杂度: O(n3) ,空间复杂度: O(n2)
优点:代码量小,代码简单,可以算出任意两个点之间的最短距离。
缺点:耗时大,遇到大数据容易时间超限。

解题

在看题的时候,如果我们观察到数据范围N≤一个很小的数,且这题是要求最短路的,那么我们要想到Floyd算法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值