水。。
#include <iostream>
using namespace std;
const int N = 105;
const int INF = 0x1fffffff;
int map[N][N];
int D[N];
int flag[N];
int n, m;
void init()
{
for(int i = 0; i < N; i++)
for(int j = 0; j < N; j++)
map[i][j] = INF;
for(int i = 1; i <= N; i++)
map[i][i] = 0;
memset(flag, 0, sizeof(flag));
}
void dijkstra()
{
for(int i = 1; i <= n; i++)
D[i] = map[1][i];
for(int t = 1; t < n; t++)
{
int min = INF;
int index = -1;
for(int i = 1; i <= n; i++)
{
if(flag[i])
continue;
if(min > D[i])
{
min = D[i];
index = i;
}
}
flag[index] = 1;
for(int i = 1; i <= n; i++)
{
if(flag[i])
continue;
for(int j = 1; j <= n; j++)
{
if(!flag[j])
continue;
if(D[i] > D[j] + map[j][i])
D[i] = D[j] + map[j][i];
}
}
}
}
int main()
{
while(scanf("%d%d", &n, &m), n || m)
{
init();
int x, y, len;
for(int i = 0; i < m; i++)
{
scanf("%d %d %d", &x, &y, &len);
map[x][y] = map[y][x] = len;
}
dijkstra();
cout << D[n] << endl;
}
return 0;
}