指定开始和结束的位置,求最短路,要保存顶点
#include<stdio.h>
#include<string.h>
struct node
{
char a[31];
} bi[151];
int poit;
int map[151][151];
int v[151],t[151];
void dij()
{
int i,j,min,min_f;
for(i=0; i<poit; i++)
{
t[i]=map[0][i];
v[i]=0;
}
v[0]=1;
for(i=1; i<poit; i++)
{
min=100000000;
min_f=0;
for(j=0; j<poit; j++)
{
if(!v[j]&&t[j]<min)
{
min=t[j];
min_f=j;
}
}
v[min_f]=1;
for(j=0; j<poit; j++)
{
if(!v[j]&&t[j]>t[min_f]+map[min_f][j])
t[j]=t[min_f]+map[min_f][j];
}
}
if(t[1]!=100000000)
printf("%d\n",t[1]);
else
printf("-1\n");
}
int main()
{
int m,i,j;
while(scanf("%d",&m)&m!=-1)
{
if(m==0)
printf("-1\n");
else
{
for(i=0; i<151; i++)
{
map[i][i]=0;
for(j=i+1; j<151; j++)
map[i][j]=map[j][i]=100000000;
}
getchar();
scanf("%s%s",bi[0].a,bi[1].a);
poit=2;
for(j=0; j<m; j++)
{
char x[31],y[31];
int z,xx,yy;
getchar();
scanf("%s%s%d",x,y,&z);
int f1=0,f2=0;
for(i=0; i<poit; i++)
{
if(strcmp(bi[i].a,x)==0)
{
f1=1;
xx=i;
}
if(strcmp(bi[i].a,y)==0)
{
f2=1;
yy=i;
}
if(f1==1&&f2==1)
break;
}
if(f1==0)
{
xx=poit;
strcpy(bi[poit].a,x);
poit++;
}
if(f2==0)
{
yy=poit;
strcpy(bi[poit].a,y);
poit++;
}
if(map[xx][yy]>z)
map[xx][yy]=map[yy][xx]=z;
}
if(strcmp(bi[0].a,bi[1].a)==0)
printf("0\n");
else
dij();
}
}
return 0;
}