畅通工程续
#include<stdio.h> #include<string.h> #include<stdlib.h> const int inf=0x7fffffff; int map[210][210],N,M,dis[210],visit[210]; int dij(int x,int y ) { int i,j,t,k; for(i=0;i<N;i++) { dis[i]=map[x][i]; visit[i]=0; } for(i=0;i<N;i++) { 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]=map[k][j]+dis[k]; } if(x!=y) //如果起点和终点相同。。0 return dis[y]; else return 0; } int main( ) { while(scanf("%d%d",&N,&M)!=EOF) { int i,j,k,m,n,a,b,c,s,e; for(i=0;i<310;i++) dis[i]=inf; for(i=0;i<N;i++) for(j=0;j<N;j++) map[j][i]=inf; for(i=0;i<M;i++) { scanf("%d%d%d",&a,&b,&c); if(c<map[a][b]) map[a][b]=map[b][a]=c; //选最小的路。 } scanf("%d%d",&s,&e); k=dij(s,e); if(k!=inf) printf("%d\n",k); else printf("-1\n"); } return 0; }这道题wa了好几次啊。。很多细节没处理。。
posted on 2011-04-30 13:01 more think, more gains 阅读(114) 评论(0) 编辑 收藏 举报