http://poj.org/problem?id=2240
floyd 的变形 题意 有n个货币,他们的交换情况m个 例如: 3 USDollar BritishPound FrenchFranc 3 USDollar 0.5 BritishPound BritishPound 10.0 FrenchFranc FrenchFranc 0.21 USDollar 求出 是否存个一个增长的货币回路 #include<iostream> #include<string> #include<string.h> #include<stdio.h> const double eps=1e-8; #define max 999999 const int N=1000; using namespace std; int n,m; double dis[N],map[N][N]; int vis[N]; string name[N]; int search(string a) { int i; for(i=0;i<n;i++) { if(name[i]==a)return i; } } void floyd() { int i,j,k; for(i=0;i<n;i++) { for(j=0;j<n;j++) { for(k=0;k<n;k++) { double t=map[j][i]*map[i][k]; if(map[j][k]<t)map[j][k]=t; } } } } int main() { int l=0,i; while(cin>>n) { if(n==0)break; l++; for(i=0;i<n;i++) { cin>>name[i]; } cin>>m; string a,b; memset(map,0,sizeof(map)); double w; while(m--) { cin>>a>>w>>b; int x=search(a); int y=search(b); map[x][y]=w; } floyd(); int ans=0; for(i=0;i<n;i++) { if(map[i][i]>1.0){ans=1;break;} } if(ans)printf("Case %d: Yes\n",l); else printf("Case %d: No\n",l); } }