最短路径问题
#include<stdio.h> #include<stdlib.h> #include<string.h> int N,M; int map[1100][1100],dis[1100],visit[1100],exp[1100][1100],price[1100]; const int inf=0x7fffffff; int dij(int x,int y) { int i,j,k,t,p; for(i=1;i<=N;i++) { dis[i]=map[i][x]; visit[i]=0; price[i]=exp[i][x]; } dis[x]=0; visit[x]=1; for(i=1;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) if(dis[j]>=dis[k]+map[k][j]) { dis[j]=dis[k]+map[k][j]; price[j]=price[k]+exp[k][j]; if(price[j]<price[k]+exp[k][j]) { dis[j]=dis[k]+map[k][j]; price[j]=price[k]+exp[k][j]; } } } } printf("%d %d\n",dis[y],price[y]); } int main( ) { while(scanf("%d%d",&N,&M)!=EOF,N|M) { int i,j,k,a,b,t,p,s,e; memset(price,0,sizeof(price)); for(i=0;i<=N;i++) for(j=0;j<=N;j++) map[i][j]=inf,dis[i]=inf,exp[i][j]=inf; for(i=0;i<M;i++) { scanf("%d%d%d%d",&a,&b,&t,&p); if(t<map[a][b]) map[a][b]=map[b][a]=t,exp[a][b]=exp[b][a]=p; } scanf("%d%d",&s,&e); dij(s,e); } return 0; }
posted on 2011-04-30 22:07 more think, more gains 阅读(146) 评论(0) 编辑 收藏 举报