简单最短路~
#include <iostream>
#include <cstdio>
#include <queue>
#include <cstring>
#include <string>
#include <cmath>
#include <vector>
#include <map>
#include <stack>
#include <algorithm>
//#include "myAlgorithm.h"
#define MAX 105
#define OFFENCE (1e9 + 5)
#define INF (1e8 + 5)
#define eps 1e-9
#define Rep(s, e) for( int i = s; i <= e; i++)
#define Cep(e, s) for( int j = e; j >= s; j --)
#define PI acos(-1.0)
//#pragma comment(linker, "/STACK:36777216") ///传说中的外挂
using namespace std;
int n, m;
int mp[MAX][MAX];
void init() {
Rep(0, n) {
for(int j = 0; j <= n; j++) {
mp[i][j] = INF;
}
}
int a, b, c;
Rep(1, m) {
cin>>a>>b>>c;
if( c < mp[a][b]) {
mp[a][b] = mp[b][a] = c;
}
}
}
void floyd() {
for(int k = 1; k <= n; k++) {
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) {
int temp = mp[i][k] + mp[k][j];
if(temp < mp[i][j]) {
mp[i][j] = temp;
}
}
}
}
if(n == 1) {
cout<<0<<endl;
return ;
}
cout<<mp[1][n]<<endl;
}
int main() {
while(cin>>n>>m, n + m) {
init();
floyd();
}
return 0;
}
/**
*/