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 虽然偶尔会迷路,但是因为有了你的帮助 **和**从此还是过上了幸福的生活。 ――全剧终――
第一次使用map~感觉还不错哦~~
AC-code:
#include<cstdio>
#include<cstring>
#include<map>
#include<iostream>
#include<algorithm>
#define max 0x3f3f3f3f
#define min(a,b) a>b?b:a
using namespace std;
int cost[200][200],dis[200],cnt;
void dij(int a)
{
int i,vis[200];
for(i=1;i<cnt;i++)
{
dis[i]=max;
vis[i]=0;
}
dis[a]=0;
while(1)
{
int v=-1,min=max;
for(i=1;i<cnt;i++)
if(!vis[i]&&(dis[i]<dis[v]||v==-1))
{
v=i;
min=dis[v];
}
if(v==-1)
break;
vis[v]=1;
for(i=1;i<cnt;i++)
dis[i]=min(dis[i],dis[v]+cost[v][i]);
}
}
int main()
{
int i,n,k;
char str1[105],str2[105];
map<string,int> mat;
while(scanf("%d",&n)&&n!=-1)
{
int flag=0;
mat.clear();
memset(cost,max,sizeof(cost));
scanf("%s%s",str1,str2);
if(!strcmp(str1,str2))
{
flag=1;
}
mat[str1]=1;
mat[str2]=2;
cnt=3;
for(i=1;i<=n;i++)
{
scanf("%s%s%d",str1,str2,&k);
if(!mat[str1])
mat[str1]=cnt++;
if(!mat[str2])
mat[str2]=cnt++;
if(k<cost[mat[str1]][mat[str2]])
cost[mat[str1]][mat[str2]]=cost[mat[str2]][mat[str1]]=k;
}
if(flag)
{
printf("0\n");
continue;
}
dij(1);
if(dis[2]==max)
printf("-1\n");
else
printf("%d\n",dis[2]);
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/lin14543/article/details/47749803