#include <stdio.h>
#include <stdlib.h>
#define MAX 101
#define INF 10000000
int road[MAX][MAX],smallRoad[MAX],flag[MAX];
int main()
{
//用邻接矩阵完成最短路1010题(AC)
int n,m,i,j,a,b,c,t,temp;
//freopen("in.txt","r",stdin);
while(scanf("%d%d",&n,&m)==2){
if(n==0&&m==0) break;
for(i=1;i<=n;i++) //初始化邻接矩阵
{
flag[i]=0;
for(j=1;j<=n;j++)
road[i][j]=INF;
}
for(i=0;i<m;i++){ //建立邻接矩阵
scanf("%d%d%d",&a,&b,&c);
road[a][b]=road[b][a]=c;
}
for(i=1;i<=n;i++)
smallRoad[i]=road[1][i];
flag[1]=1;
while(1){
for(i=2,t=1;i<=n;i++){ //找到smallrode[]最小值
if(!flag[i] && smallRoad[i]<smallRoad[t] && smallRoad[i]!=INF ){
t=i;
}
}
flag[t]=1;
if(t==n || t==1) //结果输出
{
printf("%d\n",smallRoad[n]);
break;
}
for(j=2;j<=n;j++){ //更新smallroad数据
if(!flag[j]){
temp=smallRoad[t]+road[t][j];
if(temp<smallRoad[j])
smallRoad[j]=temp;
}
}
}
}
return 0;
}
Prim算法题