Floyd解法:
/*HDOJ2544
作者:陈佳润
2013-04-09
*/
#include<stdio.h>
#include<string.h>
#define min(a,b) (a>b?b:a)
int map[105][105],n;
void Floyd(){//Floyd算法
int i,k,j;
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(map[i][j]>map[i][k]+map[k][j])
map[i][j]=map[i][k]+map[k][j];
}
int main(){
int m,i,a,b,c;
//freopen("1.txt","r",stdin);
while(scanf("%d%d",&n,&m)!=EOF&&(n!=0||m!=0)){
memset(map,0x3f3f3f3f,sizeof(map));
for(i=1;i<=m;i++){
scanf("%d%d%d",&a,&b,&c);
map[a][b]=min(map[a][b],c);
map[b][a]=map[a][b];
}
Floyd();
printf("%d\n",map[1][n]);
}
return 0;
}