一代宗师的风采---Floyd算法

谨以此博客,向Floyd大师致敬。

人人都知道,算法贵在精炼,但如果一定要选出一种最为精炼,最为巧妙的算法,那么我一定会去选Floyd算法。

即使它的时间性能在同类算法中算不上佼佼者,但它那大道至简的代码实现,那动态规划思想的极致运用,确实令我叹为观止,

沉迷其中难以自拔。

我甚至没有找出一道例题来实现Floyd算法,因为这短小精悍而通用的代码,根本不需要凭借任何一道题而存在。

for(int k=0;k<n;k++)
  for(int i=0;i<n;i++)
    for(int j=0;j<n;j++)
    {
        G[i][j]=min(G[i][j],G[i][k]+G[k][j]);

    }


这或许是博主写的最短的博客了,托Floyd大师的福,你没看错,上面那个三重循环,就是算法的全部实现部分。只要将G数组初始化成Inf,当一维变量二维变量相等时,G初始化为零,n设置为图上点的个数,最后的G数组,就是任意两点之间的距离!!精妙,精妙到可怕。

比如我输出G【1】【3】,就可以把1号点到3号点最短路径的长度输出。

我相信肯定有想问为什么的读者,好奇心人皆有之,可博主自认为,对这算法的理解也只是皮毛,并且,这几乎可以说只有一句话的代码,实在太值得自己参悟了,大家不妨单步跟踪跑一下,有些知识,的确是别人无法用语言传授的,我不愿去用我拙劣的理解去亵渎Floyd大师,学习之路漫漫,致敬Floyd大师,与君共勉。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值