代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
#include <cmath>
using namespace std;
#define MAXN 200010
#define INF 0x3f3f3f3f
struct edge
{
int from, to, cost;
};
edge es[MAXN];
int n, m, d[MAXN];
void Bellman_Ford(int s)
{
for(int i = 1; i <= n; i++) d[i] = INF;
d[s] = 0;
while(1)
{
bool update = false;
for(int i = 0; i < 2*m; i++)
{
edge e = es[i];
if(d[e.from] != INF && d[e.to] > d[e.from] + e.cost)
{
d[e.to] = d[e.from] + e.cost;
update = true;
}
}
if(!update) break;
}
}
int main()
{
while(scanf("%d%d", &n, &m)!=EOF)
{
if(n==0&&m==0) break;
for(int i = 0; i < m; i++)
{
scanf("%d%d%d", &es[i].from, &es[i].to, &es[i].cost);
es[i+m].from=es[i].to;
es[i+m].to=es[i].from;
es[i+m].cost=es[i].cost;
}
Bellman_Ford(1);
printf("%d\n",d[n]);
}
return 0;
}