Floyd求环_Poj_2240

//太郁闷了!自己货币换自己货币居然还存在不等于1的情况,只能说:他妹!
//另外学到了Floyd求环的办法:初始一个特殊的值,如果D[i][i]有发生改变,就存在环(之前看过但没用过 呵呵)

#include<iostream>
#include<cstring>
using namespace std;
int n,m;
char Money[30][100],tMoney[100];
double D[30][30];
int main()
{
int i,j,x1,x2;
double rate;
int sum=1;
while(cin>>n,n>0)
{
for(i=0;i<n;i++)
scanf("%s",Money[i]);
cin>>m;
//初始化D
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
D[i][j]=-1;
}
for(i=0;i<n;i++)//自己换自己是1换1
D[i][i]=1;
for(i=0;i<m;i++)
{
scanf("%s",tMoney);
for(j=0;j<n;j++)
{
if(!strcmp(Money[j],tMoney))//找到对应货币的ID
{
x1=j;
break;
}
}
cin>>rate;
scanf("%s",tMoney);
for(j=0;j<n;j++)
{
if(!strcmp(Money[j],tMoney))
{
x2=j;
break;
}
}
D[x1][x2]=rate;
}
//Floyd
int k;
for(k=0;k<n;k++)
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(D[i][k]>0 && D[k][j]>0 && D[i][k]*D[k][j]>D[i][j])
D[i][j]=D[i][k]*D[k][j];
}
}
}
//判断是否存在货币自己换自己大于1了
for(i=0;i<n;i++)
if(D[i][i]>1)
{
printf("Case %d: Yes\n",sum++);
break;
}
if(i==n) printf("Case %d: No\n",sum++);
}
return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值