邻接矩阵+迪杰斯特拉
#include <iostream>
#include <cstring>
#include <vector>
using namespace std;
#define INF 10005
int mp[105][105];
void floyd(int n){
for(int i=1; i<=n; ++i){ //经过i点
for(int j=1; j<=n; ++j){ //从j出发
if(mp[j][i]==INF)
break;
for(int k=1; k<=n; ++k){ //到达k
if(mp[i][k]!=INF && mp[j][k]>mp[j][i]+mp[i][k]){
mp[j][k]=mp[j][i]+mp[i][k];
}
}
}
}
}
int main(){
int m=0, n=0;
while(cin >> n>> m){
if(!m && !n)
break;
int a=0, b=0, c=0;
memset(mp, INF, sizeof(mp));
for(int i=1; i<=n; ++i){
mp[i][i]=0;
}
while(m--){
cin >> a >> b >> c;
mp[a][b]=c;
mp[b][a]=c;
}
floyd(n);
cout << mp[1][n] << endl;
}
return 0;
}