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

發佈了29 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章