最短路径问题,只要把相对应的字符串转化一下,其中的信息存储到二维数组中,然后用迪杰斯特拉算法求解就行了,要注意的是出发点和结束点一样的话要另外考虑
#include#include int map[155][155];int flag[155],mark[155],k;int Dijkstra(int V){ int i,j,min,dir; for(i=0;i mark[j]) { min=mark[j]; dir=j; } if(min==100000000)break; flag[dir]=1; for(j=0;j mark[dir]+map[dir][j]) mark[j]=mark[dir]+map[dir][j]; } return mark[1];}int main(){ char name[155][35],str1[35],str2[35]; int i,j,a,num1,num2,N; while(scanf("%d",&N),N!=-1) { for(i=0;i<155;i++) for(j=0;j<155;j++) map[i][j]=100000000; scanf("%s %s",name[0],name[1]); k=2; for(i=0;i a) map[num1][num2]=a; if(map[num2][num1]>a) map[num2][num1]=a; } if(strcmp(name[0],name[1])==0) printf("0\n"); else{ i=Dijkstra(0); if(i>=100000000) printf("-1\n"); else printf("%d\n",i); } } return 0;}