标签:
6 xiasha westlake xiasha station 60 xiasha ShoppingCenterofHangZhou 30 station westlake 20 ShoppingCenterofHangZhou supermarket 10 xiasha supermarket 50 supermarket westlake 10 -1
50 Hint: The best route is: xiasha->ShoppingCenterofHangZhou->supermarket->westlake 虽然偶尔会迷路,但是因为有了你的帮助 **和**从此还是过上了幸福的生活。 ――全剧终――处理字符串。代码:#include<stdio.h> #include<string.h> #include<algorithm> #define INF 0x3f3f3f using namespace std; int map[160][160],low[160],vis[160]; int n,k; char s[160][35]; void init() { for(int i=0;i<=150;i++) //最大值不是n,是k,但现在可还未到最大值; { for(int j=0;j<=150;j++) { if(i==j) map[i][j]=0; else map[i][j]=INF; } } } void dijkstra(int x) { int next,j,i,min; memset(vis,0,sizeof(vis)); for(i=0;i<=k;i++) { low[i]=map[x][i]; } vis[x]=1; for(i=1;i<=k;i++) { min=INF; for(j=0;j<=k;j++) { if(!vis[j]&&min>low[j]) { min=low[j]; next=j; } } if(min==INF) break; vis[next]=1; for(j=0;j<=k;j++) { if(!vis[j]&&low[j]>low[next]+map[next][j]) { low[j]=low[next]+map[next][j]; } } } } int main() { int i,j,c,a,b; char start[35],end[35]; while(scanf("%d",&n)!=EOF&&(n!=-1)) { init(); scanf("%s%s",s[0],s[1]); //将所在地与目的的放入数组中,0代替所在地,1代替目的地; k=1; for(i=0;i<n;i++) { scanf("%s%s%d",start,end,&c); for(j=0,a=-1,b=-1;j<=k;j++) //将车站都放入数组中; { if(strcmp(s[j],start)==0&&a==-1) a=j; if(strcmp(s[j],end)==0&&b==-1) b=j; if(a!=-1&&b!=-1) break; } if(a==-1) { k++; a=k; strcpy(s[a],start); } if(b==-1) { k++; b=k; strcpy(s[b],end); } if(map[a][b]>c) map[a][b]=map[b][a]=c; } if(strcmp(s[0],s[1])==0) //所在地与目的地相同时输出0; { printf("0\n"); continue; } dijkstra(0); if(low[1]==INF) printf("-1\n"); else printf("%d\n",low[1]); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/longge33445/article/details/47758081