标签:
题意:给出n条路,起点和终点,问最短距离
用map处理一下地名,再用floyd
可是不懂的是:为什么INF定义成0x7fffffff就输出一堆奇怪的东西,改成100000000就可以了
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include <cmath> 5 #include<stack> 6 #include<vector> 7 #include<map> 8 #include<set> 9 #include<queue> 10 #include<algorithm> 11 #define mod=1e9+7; 12 using namespace std; 13 14 typedef long long LL; 15 const int INF = 10000000; 16 const int maxn=1005; 17 map<string,int> mp; 18 int d[maxn][maxn]; 19 20 int main(){ 21 int n,i,j,k,w; 22 string st,en,s1,s2; 23 while(scanf("%d",&n)!=EOF&&(n!=-1)){ 24 mp.clear(); 25 int cnt=0; 26 27 for(i=0;i<maxn;i++){ 28 for(j=0;j<maxn;j++){ 29 if(i==j) d[i][j]=0; 30 else d[i][j]=INF; 31 } 32 } 33 34 cin>>st>>en; 35 if(!mp[st]) mp[st]=cnt++; 36 if(!mp[en]) mp[en]=cnt++; 37 38 for(i=0;i<n;i++){ 39 cin>>s1>>s2>>w; 40 if(!mp[s1]) mp[s1]=cnt++; 41 if(!mp[s2]) mp[s2]=cnt++; 42 43 if(d[mp[s1]][mp[s2]]>w) d[mp[s1]][mp[s2]]=d[mp[s2]][mp[s1]]=w; 44 } 45 46 for(k=0;k<cnt;k++) 47 for(i=0;i<cnt;i++) 48 for(j=0;j<cnt;j++) 49 d[i][j]=min(d[i][j],d[i][k]+d[k][j]); 50 51 if(d[mp[st]][mp[en]]==INF) printf("-1\n"); 52 else printf("%d\n",d[mp[st]][mp[en]]); 53 } 54 return 0; 55 }
标签:
原文地址:http://www.cnblogs.com/wuyuewoniu/p/4401048.html