1 #include<stdio.h> 2 #define MAX 0x3fffffff 3 int map[105][105],dis[105]; 4 bool use[105]; 5 int n,m; 6 7 void dijk(int start) 8 { 9 int min,rj,i,j; 10 for(j=1;j<=n;j++) 11 { 12 dis[j]=map[1][j]; 13 use[j]=0; 14 } 15 use[1]=1; 16 for(i=1;i<n;i++) 17 { 18 min=MAX; 19 for(j=1;j<=n;j++) 20 { 21 if(use[j]==1)continue; 22 if(dis[j]<min) 23 { 24 min=dis[j]; 25 rj=j; 26 } 27 } 28 29 use[rj]=1; 30 for(j=1;j<=n;j++) 31 { 32 if(use[j]==1)continue; 33 if(dis[j]>dis[rj]+map[rj][j]) 34 dis[j]=dis[rj]+map[rj][j]; 35 } 36 } 37 } 38 39 int main() 40 { 41 int i,j,a,b,temp; 42 while(scanf("%d%d",&n,&m),n||m) 43 { 44 for(i=1;i<=n;i++) 45 { 46 for(j=1;j<=n;j++) 47 { 48 map[i][j]=MAX; 49 } 50 } 51 for(i=1;i<=m;i++) 52 { 53 scanf("%d%d",&a,&b); 54 scanf("%d",&temp); 55 if(temp<map[a][b]) 56 { 57 map[b][a]=temp; 58 map[a][b]=temp; 59 } 60 } 61 62 dijk(1); 63 printf("%d\n",dis[n]); 64 } 65 }