#include <iostream>
#include <stdio.h>
#include <map>
#include <string>
#define inf 999999
using namespace std;
int my_map[200][200];
int s[200];
int dist[200];
void dij(int v,int n)
{
int i,j,min,dir;
for(i=1;i<=n;i++)
{
s[i]=0;
dist[i]=my_map[v][i];
}
s[v]=1;
dist[v]=0;
for(i=1;i<=n;i++)
{
min=inf;
for(j=1;j<=n;j++)
if(s[j]==0&&min>dist[j])
{
dir=j;
min=dist[j];
}
if(min==inf)
break;
s[dir]=1;
for(j=1;j<=n;j++)
if(s[j]==0&&dist[j]>dist[dir]+my_map[dir][j])
dist[j]=dist[dir]+my_map[dir][j];
}
}
int main()
{
int n,num,i,j,x;
char s1[55],s2[55];
char begin[55],end[55];
map<string,int>m;
while(scanf("%d",&n)!=EOF)
{
if(n==-1)
break;
scanf("%s%s",begin,end);
num=1;
if(!m[begin])
m[begin]=num++;
if(!m[end])
m[end]=num++;
for(i=0;i<=200;i++)
for(j=0;j<=200;j++)
if(i==j)
my_map[i][j]=0;
else
my_map[i][j]=inf;
for(i=1;i<=n;i++)
{
scanf("%s%s%d",s1,s2,&x);
if(!m[s1])
m[s1]=num++;
if(!m[s2])
m[s2]=num++;
my_map[m[s1]][m[s2]]=x;
my_map[m[s2]][m[s1]]=x;
}
dij(m[begin],num-1);
if(dist[m[end]]==inf)
printf("-1\n");
else
printf("%d\n",dist[m[end]]);
m.clear();
}
return 0;
}
hdu2112 最短路+map
最新推荐文章于 2019-03-23 13:56:42 发布