#include <iostream>
#include <stdio.h>
using namespace std;
int main(){
int i,j,k,M,N,x,y,v;
while(scanf("%d %d",&N,&M)&&N!=0&&M!=0){
int map[102][102]={0},max=100000;
int d[102][102];
for(i=1;i<=M;i++){
scanf("%d %d %d",&x,&y,&v);
if(!map[x][y]){
map[x][y]=v;
map[y][x]=v;
}
if(v<map[x][y]){
map[x][y]=v;
map[y][x]=v;
}
}
for(i=1;i<=N;i++){
for(j=1;j<=N;j++){
if(i==j){
d[i][j]=0;
d[j][i]=0;
}
if(map[i][j]){
d[i][j]=d[j][i]=map[i][j];
}
if(!map[i][j]&&i!=j){
d[i][j]=d[j][i]=max;
}
}
}
for(i=1;i<=N;i++){
for(j=1;j<=N;j++){
for(k=1;k<=N;k++){
if((d[j][i]+d[i][k]<d[j][k])){
d[j][k]=d[j][i]+d[i][k];
}
}
}
}
printf("%d\n",d[1][N]);
}
return 0;
}
ACM暑期集训——专题二[最短路Floyd算法]
最新推荐文章于 2024-07-20 09:51:47 发布