标签:
题目:点击打开链接
关于C++中map的使用:点击打开链接
代码:
#include<stdio.h> #include<string.h> #include<string> #include<map>//将字符串转化成数字 #include<algorithm> #define INF 0x3f3f3f3f using namespace std; char str1[30],str2[30]; int cost[150][150],d[150]; bool used[150]; void distr(int x,int y) { for(int i=1;i<150;i++)// !! { d[i]=INF; used[i]=false; } d[x]=0; while(true) { int v=-1; for(int u=1;u<=y;u++) if(!used[u]&&(v==-1||d[u]<d[v])) v=u; if(v==-1) break; used[v]=true; for(int u=1;u<=y;u++) d[u]=min(d[u],d[v]+cost[v][u]); } if(d[2]>=INF) printf("-1\n"); else printf("%d\n",d[2]); } int main() { int t; map<string,int>mp; while(~scanf("%d",&t)) { if(t==-1) break; int i,j; int c; int flag=0; mp.clear(); for(i=1;i<150;i++) for(j=1;j<150;j++) cost[i][j]=INF; scanf("%s%s",str1,str2); if(strcmp(str1,str2))//判断起点和终点是否相等 flag=1; mp[str1]=1; mp[str2]=2; int count=3; for(i=0;i<t;i++) { scanf("%s%s%d",str1,str2,&c); if(!mp[str1]) mp[str1]=count++; if(!mp[str2]) mp[str2]=count++; cost[mp[str1]][mp[str2]]=cost[mp[str2]][mp[str1]]=c; } if(!flag) printf("0\n"); else distr(1,count); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/zm_11/article/details/47753975