解題思路:
(1)floyd算法
(2)更新矩陣時利用項之間的乘積
#include<iostream>
#include<cstring>
using namespace std;
string currency[40];
float exchange[40][40];
int n,m,c=0;
void floyd()
{
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
exchange[i][j] = max(exchange[i][j],exchange[i][k] * exchange[k][j]);
for(int i=1;i<=n;i++)
if(exchange[i][i] > 1)
{
cout<<"Case "<<c<<": Yes"<<endl;
return;
}
cout<<"Case "<<c<<": No"<<endl;
return;
}
int main()
{
while(cin>>n)
{
memset(exchange,0,sizeof(exchange));
for(int i=1;i<=n;i++)
exchange[i][i] = 1;
c++;
if(n == 0)
break;
for(int i=1;i<=n;i++)
cin>>currency[i];
string a,b;
int p,q;
double c;
cin>>m;
while(m--)
{
cin>>a>>c>>b;
for(int i=1;i<=n;i++)
{
if(a == currency[i])
p = i;
if(b == currency[i])
q = i;
}
exchange[p][q] = c;
}
floyd();
}
return 0;
}