您的位置:首页 > 编程语言 > C语言/C++

POJ 2240 Arbitrage (floyed) .cpp

2011-07-29 13:53 281 查看
#include <cstdio>
#include <cstring>
int n,m;
double dis[31][31],rate;
char name[31][30],name1[30],name2[30];

int getpos(char *s)
{
int i;
for(i=1;i<=n;i++)
{
if(strcmp(s,name[i])==0)
{
return i;
}
}
return 0;
}

int main()
{
int i,j,k,casenum = 0;
while(scanf("%d",&n),n!=0)
{
casenum++;
memset(dis,0,sizeof(dis));
for(i=1;i<=n;i++)
{
dis[i][i] = 1.0;
scanf("%s",name[i]);
}
scanf("%d",&m);
for(i=1;i<=m;i++)
{
scanf("%s%lf%s",name1,&rate,name2);
dis[getpos(name1)][getpos(name2)] = rate;
}
bool flag = true;
for(k=1;k<=n && flag;k++)
{
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(dis[i][j] < dis[i][k] * dis[k][j])
dis[i][j] = dis[i][k] * dis[k][j];
}
if(dis[i][i] > 1.0)
{
printf("Case %d: Yes\n",casenum);
flag = false;
break;
}
}
}
if(flag)
printf("Case %d: No\n",casenum);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: