一道有趣的题目,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++ );elseprintf( "Case %d: No\n",T++ );}return 0;
}