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);
}
}