【OI之路】03图论算法-2最短路之全源最短路(Floyd)

来源:互联网 发布:如何生成淘宝客链接 编辑:程序博客网 时间:2024/05/20 02:53

建议前往我的网站获得最佳体验。

3.2.1定义

这个算法用于求所有点对的最短距离。比调用n次SPFA的优点在于代码简单,时间复杂度为O(n^3)。【无法计算含有负环的图】

依次扫描每一点(k),并以该点作为中介点,计算出通过k点的其他任意两点(i,j)的最短距离,这就是floyd算法的精髓!同时也解释了为什么k点这个中介点要放在最外层循环。

其实就是运用动态规划的思想。

3.2.2 代码

void floyd(){    memset(dis,127,sizeof(dis));    for(int i=1;i<=n;i++) dis[i][i]=0;    for(int k=1;k<=n;k++)//中介点        for(int i=1;i<=n;i++)            for(int j=1;j<=n;j++)                dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);}
原创粉丝点击