水题。。。。dijstra算法。。。。
#include<iostream>
#include<string.h>
#include<algorithm>
#include<limits.h>
#define M 99999999
#define N 105
#define FOR(i,s,t) for(int i=(s);i<=t;++i)
using namespace std;
int dist[N];
int map[N][N];
bool visit[N];
int n,m;
void Dijstra()
{ int now=1;
dist[now]=0;
visit[now]=false;
FOR(i,1,n)
{ FOR(j,1,n)
if(visit[j]&&dist[j]>dist[now]+map[now][j])
dist[j]=dist[now]+map[now][j];
int minx=M;
FOR(j,1,n)
if(visit[j]&&dist[j]<minx)
minx=dist[now=j];
visit[now]=false;
}
cout<<dist[n]<<endl;
}
int main()
{ while(cin>>n>>m&&n&&m)
{ FOR(i,1,n)
FOR(j,1,n)
{ dist[i]=M;
map[i][j]=M;
visit[i]=true;
}
FOR(i,1,m)
{ int a,b,c;
cin>>a>>b>>c;
if(map[a][b]>c)
map[a][b]=map[b][a]=c;
}
Dijstra();
} return 0;
}