#include<bits/stdc++.h>usingnamespacestd;#define INF 0x3f3f3fintA[101][101];map<string,int>B;intn,m;intfinal[101];intdis[101];// return the min index of dis arrayintmin_index(){intret=-1;intmin=INF;for(inti=1;i<=n;i++){if(final[i])continue;if(dis[i]<min){min=dis[i];ret=i;}}returnret;}intdijkstra(intx,inty){memset(final,0,sizeof(final));memset(dis,INF,sizeof(dis));intstart=x;for(inti=1;i<=n;i++){dis[i]=A[start][i];}intmin;while((min=min_index())!=-1){final[min]=true;// update dis arrayfor(intj=1;j<=n;j++){if(dis[min]+A[min][j]<dis[j]){dis[j]=dis[min]+A[min][j];}}}returndis[y];}intmain(){memset(A,INF,sizeof(A));cin>>n>>m;stringsrc,dest;intd;intindex=1;intx,y;for(inti=0;i<m;++i){cin>>src>>dest>>d;if(B.count(src)==0){B[src]=index++;}if(B.count(dest)==0){B[dest]=index++;}x=B[src];y=B[dest];A[x][y]=d;A[y][x]=d;}intt;cin>>t;for(inti=0;i<t;i++){cin>>src>>dest;x=B[src];y=B[dest];// 求x->y的最短距离intmin_dis=dijkstra(x,y);cout<<(min_dis>=INF?-1:min_dis)<<endl;}inta=0;return0;}
最短距离
all_STL