hdu2544最短路

来源:互联网 发布:丽新网络盒子 编辑:程序博客网 时间:2024/05/21 10:18

1.题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=2544

 

2.思路:

    我是用floyd算法去求的。具体看代码。

 

 

3.参考代码:

 

#include <stdio.h>#include <string.h>#define inf 0xffffint n,m;   ///n为点数,m为边数int dis[1100][1100];   ///存放距离的数组void floyd(){   ///floyd算法int i,j,k;   ///循环变量for(k=1;k<=n;k++){for(i=1;i<=n;i++){for(j=1;j<=n;j++){if(dis[i][j]>dis[i][k]+dis[k][j])   ///判断dis[i][j]=dis[i][k]+dis[k][j];   ///更新距离}}}}int main(){int i,j;   ///循环变量int u,v,w;   ///两个商店以及它们之间的距离while(scanf("%d %d",&n,&m) && (n || m)){for(i=1;i<=n;i++){for(j=1;j<=n;j++){if(i==j)   ///本身到本身的距离为0dis[i][j]=0;else   ///其他的都初始化为无穷大,即最开始都是单独的点dis[i][j]=dis[j][i]=inf;}}while(m--){scanf("%d %d %d",&u,&v,&w);if(dis[u][v]>w)   ///比较dis[u][v]=dis[v][u]=w;}floyd();printf("%d\n",dis[1][n]);   ///输出起点到终点的最短距离}return 0;}