2 1 1 2 3 3 3 1 2 5 2 3 5 3 1 2 0 0
3 2
#include<stdio.h> #include<string.h> #define INF 0x3f3f3f3f int map[110][110],dis[110],vis[110],ans; void dijkstra(int n){ memset(vis,0,sizeof(vis)); int i; for(i=1;i<=n;i++) dis[i]=map[1][i]; vis[1]=1; for(i=1;i<=n;i++){ int j,k,temp=INF; for(j=1;j<=n;j++) if(!vis[j]&&temp>dis[j]) temp=dis[k=j]; vis[k]=1; for(j=1;j<=n;j++) if(!vis[j]&&dis[j]>dis[k]+map[k][j]) dis[j]=dis[k]+map[k][j]; } } void init(int n){ for(int i=1;i<=n;i++) for(int j=1;j<=n;j++){ if(i==j) map[i][j]=map[j][i]=0; else map[i][j]=map[j][i]=INF; } } int main(){ int n,m; while(scanf("%d%d",&n,&m)!=EOF&&n!=0&&m!=0){ int i; init(n); for(i=0;i<m;i++){ int a,b,cost; scanf("%d%d%d",&a,&b,&cost); if(map[a][b]>cost) map[a][b]=map[b][a]=cost; } dijkstra(n); ans=dis[n]; printf("%d\n",ans); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/gui951753/article/details/47726959