#include<stdio.h> const int inf=1000000000; int g[101][101],mini[101]; void dijkstra(int n,int g[][101],int s,int* mini) { int v[101],i,j,k; for(i=1;i<=n;i++) { mini[i]=inf; v[i]=0; } for(mini[s]=0,j=1;j<=n;j++) { for(k=-1,i=1;i<=n;i++) if(!v[i]&&(k==-1||mini[i]<mini[k])) k=i; for(v[k]=1,i=1;i<=n;i++) if(!v[i]&&mini[k]+g[k][i]<mini[i]) mini[i]=mini[k]+g[k][i]; } } int main() { int n,m,a,b,c,i,j; while(scanf("%d%d",&n,&m)!=EOF,n||m) { for(i=1;i<=n;i++) for(j=1;j<=n;j++) g[i][j]=inf; while(m--) { scanf("%d%d%d",&a,&b,&c); if(g[a][b]>c) g[a][b]=g[b][a]=c; } dijkstra(n,g,1,mini); printf("%d\n",mini[n]); } return 0; } /************************************************************** Problem: 2230 User: admin Language: C Result: Accepted Time:14 ms Memory:1184 kb ****************************************************************/