一道有趣的题目,zzy大神告诉我的用floyd... 基本上没想什么map现在用得比较熟练了,想起昨天的福州的三国杀,写的我想吐血啊!
题目就是求汇率是否能形成一个环,使得利滚利,钱生钱。这样只要把初始结点对自己的汇率调整为1.0,对其他的是0,这样来用Floyd就可以解决啦~
#include<iostream>
#include<map>
#include<string>
#define MAXN 31
using namespace std;
int main()
{
map< string,int >myMap;
double G[MAXN][MAXN];
int n,m;
int T=1;
while( cin>>n )
{
if( !n ) break;
int i,j,k;
char nationA[101],nationB[101];
double rate;
for( i=1;i<=n;i++ )
{
cin>>nationA;
myMap[nationA]=i;
for( j=1;j<=n;j++ ) G[i][j]=(i==j)?1.0:0;
}
cin>>m;
for( i=1;i<=m;i++ )
{
cin>>nationA>>rate>>nationB;
G[myMap[nationA]][myMap[nationB]]=rate;
}
for( k=1;k<=n;k++ )
for( i=1;i<=n;i++ )
for( j=1;j<=n;j++ )
if( G[i][j]<G[i][k]*G[k][j] )
G[i][j]=G[i][k]*G[k][j];
bool found=false;
for( i=1;i<=n;i++ )
if( G[i][i]>1.0 )
{
found=true;break;
}
if( found )
printf( "Case %d: Yes\n",T++ );
else
printf( "Case %d: No\n",T++ );
}
return 0;
}