一次AC,so easy
#include <iostream>
#include <cstring>
using namespace std;
const int maxn = 110;
const int INFINITY = 99999;
int N,M;
int G[maxn][maxn];
int Dist[maxn];
bool final[maxn];
void Dijkstra(int v0)
{
int min;
int k;
for(int i = 0; i <= N; i++)
{
final[i] = false;
Dist[i] = G[v0][i];
}
Dist[v0] = 0;
final[v0] = true;
for(int w = 1; w <= N; w++)
{
min = INFINITY;
for(int v = 1; v <= N; v++ )
{
if(!final[v] && Dist[v] < min)
{
min = Dist[v];
k = v;
}
}
final[k] = true;
for(int v = 1; v <= N; v++)
{
if(!final[v] && min + G[k][v] < Dist[v])
{
Dist[v] = min + G[k][v];
}
}
}
}
int main()
{
while(cin>>N>>M)
{
if(N == 0 && M == 0)
break;
int x,y,d;
for(int i = 0; i <=N; i++)
{
G[i][i] = 0;
for(int j = 0; j <= N ;j ++)
{
G[i][j] = INFINITY;
}
}
for(int i = 0; i < M ;i++)
{
cin>>x>>y>>d;
G[x][y] = d;
G[y][x] = d;
}
memset(Dist,INFINITY,sizeof(Dist));
Dijkstra(1);
cout<<Dist[N]<<endl;
}
return 0;
}