最简单的Dijkstra
#include<bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
int n,m,a,b,c;
int mp[105][105];
int dis[105];
int vis[105];
void init(){
memset(vis,0,sizeof(vis));
memset(dis,INF,sizeof(dis));
memset(mp,INF,sizeof(mp));
for(int i=1;i<=m;i++){
cin>>a>>b>>c;
mp[a][b]=mp[b][a]=c;
}
}
int go(int s){
dis[s]=0;
for(int i=1;i<=n;i++){
int minn=INF;
int p=-1;
for(int j=1;j<=n;j++){
if(!vis[j]&&dis[j]<minn){
minn=dis[j];
p=j;
}
}
vis[p]=1;
for(int i=1;i<=n;i++)
if(!vis[i]){
dis[i]=min(dis[i],dis[p]+mp[p][i]);
}
}
}
int main(){
while(cin>>n>>m&&(n||m!=0)){
init();
go(1);
cout<<dis[n]<<endl;
}
}