挺烦人的,卡一上午,直到把起点终点都加进去才AC了
#include<cstdio>
#include<cstring>
char s[155][50];
int map[155][155];
#define INF 99999999
int n,k;
int find(char *c)
{
for(int i=0;i<k;i++)
if(strcmp(c,s[i])==0)
return i;
return -1;
}
int main()
{
while(scanf("%d",&n),n!=-1)
{
for(int i=0;i<150;i++)
for(int j=0;j<150;j++)
map[i][j]=INF;
char start[50],end[50];
scanf("%s %s",start,end);
memset(s,'\0',sizeof(s));
strcpy(s[0],start);
strcpy(s[1],end); /
int t;
k=2;
char p[50],q[50];
for(int i=0;i<n;i++)
{
scanf("%s %s %d",p,q,&t);
if(find(p)==-1)
strcpy(s[k++],p);
if(find(q)==-1)
strcpy(s[k++],q);
int w=find(p);
int e=find(q);
if(map[w][e]>t)
map[w][e]=map[e][w]=t;
// printf("%d %d\n",w,e);
}
if(strcmp(start,end)==0)
{
printf("0\n");
continue;
}
for(int t=0;t<k;t++)
{
for(int i=0;i<k;i++)
{
for(int j=0;j<k;j++)
{
if(map[i][j]>map[i][t]+map[t][j])
map[i][j]=map[i][t]+map[t][j];
}
}
}
if(find(start)==-1&&find(end)==-1)
{
printf("-1\n");
continue;
}
int ans=map[0][1];
if(ans==INF)
printf("-1\n");
else
printf("%d\n",ans);
}
return 0;
}