题目是说要找到所有可达路径中的路的最小容量的最大值。==拗口
将字符串转换成数组下标,用了个index函数索引。
递推公式可简述成:A[i][j]=MAX(A[i][j],MIN(A[i][k],A[k][j]));
#include<iostream> #include<cstdio> #include<cstring> #define inf 1000000 #define MIN(X,Y) ((X)<(Y)?(X):(Y)) #define MAX(X,Y) ((X)>(Y)?(X):(Y)) using namespace std; int A[205][205]; char city[205][25]; char source[25],aim[25]; int num; int index(char *s) { int i; for(i=0;i<num;i++) { if(!strcmp(city[i],s)) return i; } strcpy(city[i],s); num++; return i; } int main() { int n,r; char cityX[25],cityY[25]; int value; int i,j,k,Case=1; while(cin>>n>>r,n,r) { num=0; memset(A,0,sizeof(A)); for(i=0;i<n;i++) A[i][i]=inf; for(k=0;k<r;k++) { cin>>cityX>>cityY>>value; i=index(cityX); j=index(cityY); A[i][j]=A[j][i]=value; } cin>>source>>aim; for(k=1;k<n;k++) { for(i=0;i<n;i++) { for(j=0;j<n;j++) { A[i][j]=MAX(A[i][j],MIN(A[i][k],A[k][j])); } } } i=index(source); j=index(aim); cout<<"Scenario #"<<Case++<<endl; cout<<A[i][j]<<" tons"<<endl; putchar('\n'); } return 0; }