最短路
#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; }
posted on 2011-04-30 21:48 more think, more gains 阅读(149) 评论(0) 收藏 举报