#include<iostream> #include<cstring> #define INF 0x3f3f3f3f using namespace std; int edge[105][105],d[105]; int Dijstra(int st,int n) { int mark[105],minn,minn_num; memset(mark,0,sizeof(mark)); for(int i=1;i<n;i++) { d[i]=edge[0][i]; } d[0]=0; mark[0]=1; for(int i=1;i<n;i++) { int minn=INF; for(int j=0;j<n;j++) { if(mark[j]==0&&d[j]<=minn) { minn=d[j]; minn_num=j; } } mark[minn_num]=1; for(int j=0;j<n;j++) { if(d[j]>minn+edge[minn_num][j]) { d[j]=minn+edge[minn_num][j]; } } } } int main() { int n,m,x,y,val; while(cin>>n>>m) { if(n==0&&m==0) break; for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { if(i==j) edge[i][j]=0; else edge[i][j]=INF; } } for(int i=0;i<m;i++) { cin>>x>>y>>val; edge[x-1][y-1]=val; edge[y-1][x-1]=val; } Dijstra(0,n); cout<<d[n-1]<<endl; } }