#include<stdio.h> #include<string.h> #include<stdlib.h> int inf=0x7fffffff; int n,m; int map[110][110],hash[110],dis[110]; void dijstra() { dis[1]=0; for(int i=1;i<=n;i++) { int t=inf,pos; for(int j=1;j<=n;j++) { if(hash[j]==0) { if(dis[j]<t) { t=dis[j]; pos=j; } } } hash[pos]=1; if(pos==n) break; for(int j=1;j<=n;j++) { if(hash[j]==0) { if(map[pos][j]!=inf&&dis[pos]+map[pos][j]<dis[j])//注意要满足map[pos][j]!=inf. dis[j]=map[pos][j]+dis[pos]; } } } } int main() { int x,y,v; while(scanf("%d%d",&n,&m),m||n) { for(int i=1;i<=n;i++) { dis[i]=inf; hash[i]=0; for(int j=1;j<=n;j++) { map[i][j]=inf; } } for(int i=1;i<=m;i++) { scanf("%d%d%d",&x,&y,&v); if(x!=y&&map[x][y]>v) map[x][y]=map[y][x]=v;//差点忘了写map[x][y]=map[y][x]了。 } dijstra(); printf("%d\n",dis[n]); } // system("pause"); return 0; }
编辑器加载中...