仓库间运送货物,给出已有的传送带再仓库之间直接连接的情况,然后给出两个仓库,问他们的经过传送带的个数。。。 典型floyd,没啥说的。 题中的仓库的名字与数字是对应的,貌似用c++的<map>更好一点。。。 #include<stdio.h> #include<string.h> const int INF = 9999999; int find(char *from); int m,n,p,t,sets; char point[31][5]; int mat[31][31]; char from[5],to[5]; int i,j,k,r; //循环变量 int start,end,times; //创建邻接矩阵时候要用的 int main(void) { freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); scanf("%d",&sets); printf("SHIPPING ROUTES OUTPUT/n/n"); for( i = 1; i <= sets; i++) { printf("DATA SET %d/n/n",i); scanf("%d%d%d",&m,&n,&p); for( j = 1; j <= m; j++ ) for( k = 1; k <= m; k++ ) mat[j][k] = INF; for( j = 1; j <= m; j++ ) { scanf("%s",point[j]); mat[j][j] = 0; } for( j = 1; j <= n; j++ ) { scanf("%s%s",from,to); start = find(from); end = find(to); mat[start][end] = mat[end][start] = 1; } for( k = 1; k <= m; k++ ) for( j = 1; j <= m; j++ ) for( r = 1; r <= m; r++ ) if(mat[j][r] > mat[j][k] + mat[k][r]) mat[j][r] = mat[j][k] + mat[k][r]; for( j = 1; j <= p; j++ ) { scanf("%d%s%s",×,from,to); t = mat[find(from)][find(to)]; if(t >= INF) printf("NO SHIPMENT POSSIBLE/n"); else printf("$%d/n",100*t*times); } printf("/n"); } printf("END OF OUTPUT/n"); return 0; } int find(char *from) //找到仓库名字对应的数字 { int i; for( i = 1; i <= m; i++ ) { if(strcmp(from,point[i])==0) return i; } }