#include<stdio.h>
#include<string.h>
int map[160][160],vis[160],dist[160],st,en;
char start[35],end[35],name[160][35];
int num;
int zhao()
{
int xia=-1,i;
for(i=1;i<num;i++)
if(vis[i]==0&&(xia==-1||dist[xia]>dist[i]))
xia=i;
return xia;
}
int dijkstra()
{
int i,j,xia;
memset(vis,0,sizeof(vis));
vis[st]=1;
for(i=1;i<num;i++)
dist[i]=map[st][i];
for(i=1;i<num;i++)
{
xia=zhao();
vis[xia]=1;
if(xia==en)
break;
for(j=1;j<num;j++)
if(vis[j]==0&&dist[j]>dist[xia]+map[xia][j])
dist[j]=dist[xia]+map[xia][j];
}
if(xia==en&&dist[xia]!=map[0][0])
return dist[xia];
else return -1;//没细读题,忽略无法到达的情况
}
int na(char s[])
{
int i;
for(i=1;i<num;i++)
if(strcmp(name[i],s)==0)
return i;
strcpy(name[num],s);
num++;
return num-1;
}
int main()
{
int i,n,time,x,y;
while(scanf("%d",&n),n!=-1)
{
getchar();
num=1;
memset(map,127,sizeof(map));//忘记赋最大值
scanf("%s %s",start,end);
st=na(start);
en=na(end);
for(i=1;i<=n;i++)
{
scanf("%s%s%d",start,end,&time);
x=na(start);
y=na(end);
map[x][y]=time;
map[y][x]=time;
}
if(st==en)//忽略起始点相同的情况
printf("0\n");
else
printf("%d\n",dijkstra());
}
return 0;
}
hdu 2112 HDU Today
最新推荐文章于 2020-04-02 17:28:48 发布