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<iostream> #include<string.h> #include<queue> #include<map> #include<algorithm> #define N 0x3f3f3f3f using namespace std; struct node { int u; int v; int w; int next; }t[100100]; int dis[10100],vis[10100],head[10100],m,n; char c[1000],s[1000],ch[1000],sh[1000]; void spfa() { int i,j,k; memset(vis,0,sizeof(vis)); memset(dis,N,sizeof(dis)); dis[1]=0; vis[1]=1; queue<int>q; q.push(1); while(!q.empty()) { k=q.front(); q.pop(); vis[k]=0; for(i=head[k];i!=-1;i=t[i].next) { int v=t[i].v; if(dis[v] > dis[k] + t[i].w) { dis[v]=dis[k]+t[i].w; if(!vis[v]) { vis[v]=1; q.push(v); } } } } } int main() { int i,k,l; while(scanf("%d",&k),k!=-1) { memset(head,-1,sizeof(head)); map<string,int>mp; mp.clear(); scanf("%s%s",c,s); mp[c]=1; mp[s]=2; int flag=3; int i=0; while(k--) { scanf("%s%s%d",ch,sh,&l); if(!mp[ch]) mp[ch]=flag++; if(!mp[sh]) mp[sh]=flag++; t[i].u=mp[ch]; t[i].v=mp[sh]; t[i].w=l; t[i].next=head[mp[ch]]; head[mp[ch]] = i++; t[i].v=mp[ch]; t[i].u=mp[sh]; t[i].w=l; t[i].next=head[mp[sh]]; head[mp[sh]] = i++; } if(strcmp(c,s)==0) printf("0\n"); else { spfa(); if(dis[mp[s]] == N) printf("-1\n"); else printf("%d\n", dis[mp[s]]); } } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/z8110/article/details/47803833