#include<stdio.h>
#include<stdlib.h>
int N,M;
int map[110][110],dis[110],visit[110];
const int inf=0x7fffffff;
int dij(int x)
{
int i,j,k,t,p;
for(i=0;i<=N;i++)
{
dis[i]=map[i][1];
visit[i]=0;
}
dis[0]=0;
visit[0]=1;
for(i=0;i<=N;i++)
{
int t=inf;
for(j=0;j<=N;j++)
if(!visit[j]&&t>dis[j])
{
t=dis[j];
k=j;
}
visit[k]=1;
for(j=0;j<=N;j++)
{
if(!visit[j]&&map[k][j]!=inf&&dis[j]>dis[k]+map[k][j])
dis[j]=dis[k]+map[k][j];
}
}
return dis[x];
}
int main( )
{
while(scanf("%d%d",&N,&M)!=EOF,N|M)
{
int i,j,k,a,b,t;
for(i=0;i<=N;i++)
for(j=0;j<=N;j++)
map[i][j]=inf,dis[i]=inf;
for(i=0;i<M;i++)
{
scanf("%d%d%d",&a,&b,&t);
if(t<map[a][b])
map[a][b]=map[b][a]=t;
}
printf("%d\n",dij(N));
}
return 0;
}
转载于:https://www.cnblogs.com/tangcong/archive/2011/04/30/2033586.html