hdu_2544 最短路 (floyd算法)

来源:互联网 发布:手机淘宝店头像怎么换 编辑:程序博客网 时间:2024/05/17 06:39

原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544

分析:

         求最短路,这里用floyd算法做,先入门一下。

         关于floyd算法的中松弛的理解。

        

这样map[1][2]=Min(map[1][2],map[1][3]+map[3][2]);


我的代码:

#include<stdio.h>#include<string.h>const int MAXN = 120;const int INF =100000;int map[MAXN][MAXN];int main(){    int n,m;    while(~scanf("%d%d",&n,&m)&&(n+m))    {        for(int i=1;i<=n;i++)            for(int j=1;j<=n;j++)            {                if(i==j) map[i][j]=0;                else  map[i][j]=INF;            }        for(int i=1;i<=m;i++)        {            int a,b,v;            scanf("%d%d%d",&a,&b,&v);            if(v<map[a][b])                map[a][b]=map[b][a]=v;        }        for(int k=1;k<=n;k++)  //在 i, j 之间插点k            for(int i=1;i<=n;i++)  //遍历i ,j                for(int j=1;j<=n;j++)                {                        if(map[i][j]> map[i][k]+ map[k][j])  //松弛i,j之间的最短路劲                            map[i][j] = map[i][k]+ map[k][j];                }        printf("%d\n",map[1][n]);    }    return 0;}

总结:floyd算法还是很简单的,就是时间复杂度高点为:

                                                                                                  


原创粉丝点击