乘法+floyd
#include"stdio.h" #include"string.h" #define INF 0 int n,m; double map[31][31]; char str[31][33]; void floyd() { int i,j,k; for(k=0;k<n;k++) for(i=0;i<n;i++) for(j=0;j<n;j++) if(map[i][j]<map[i][k]*map[k][j]) map[i][j]=map[i][k]*map[k][j]; } int main() { int i,j,ii,jj,cas; double t; char s[33],ss[33]; cas=1; while(scanf("%d",&n),n) { getchar(); for(i=0;i<n;i++) gets(str[i]); scanf("%d",&m); memset(map,0,sizeof(map)); for(i=0;i<m;i++) { scanf("%s %lf %s",s,&t,ss); for(j=0;j<n;j++) { if(strcmp(str[j],s)==0) { ii=j;break; } } for(j=0;j<n;j++) { if(strcmp(str[j],ss)==0) { jj=j;break; } } map[ii][jj]=t; } floyd(); for(i=0;i<n;i++) { if(map[i][i]>1.0) { printf("Case %d: Yes\n",cas++); break; } } if(i==n)printf("Case %d: No\n",cas++); } return 0; }