计算汇率,用Floyd,最后检查对角线上的树是不是大于1
#include<stdio.h>#include<string.h>
struct node
{
char name[30];
} c[33];
double map[33][33];
int main()
{
int n,m,i,j,k,cc=0;
while(scanf("%d",&n)&&n!=0)
{
cc++;
for(i=0; i<n; i++)
{
scanf("%s",c[i].name);
map[i][i]=1;
for(j=i+1; j<n; j++)
map[i][j]=map[j][i]=0;
}
scanf("%d",&m);
for(i=0; i<m; i++)
{
char x[30],y[30];
int xx,yy;
double s;
scanf("%s%lf%s",x,&s,y);
for(j=0; j<n; j++)
{
if(strcmp(x,c[j].name)==0)
xx=j;
if(strcmp(y,c[j].name)==0)
yy=j;
}
if(map[xx][yy]<s)
map[xx][yy]=s;
}
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 f=0;
for(i=0; i<n; i++)
if(map[i][i]>1)
{
f=1;
break;
}
if(f==1)
printf("Case %d: Yes\n",cc);
else
printf("Case %d: No\n",cc);
}
return 0;
}
/*
3
USDollar
BritishPound
FrenchFranc
3
USDollar 0.5 BritishPound
BritishPound 10.0 FrenchFranc
FrenchFranc 0.21 USDollar
3
USDollar
BritishPound
FrenchFranc
6
USDollar 0.5 BritishPound
USDollar 4.9 FrenchFranc
BritishPound 10.0 FrenchFranc
BritishPound 1.99 USDollar
FrenchFranc 0.09 BritishPound
FrenchFranc 0.19 USDollar
*/