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 }