您的位置:首页 > 其它

POJ 2240 Arbitrage

2013-08-07 17:22 281 查看
这个题也是十分水的题,节点最多只有30个。

Floyd就可以过的哈。

需要注意的是:

1、不要用gets(),因为中间有空行;

2、注意输出的是Yes,No。

下面是代码:

#include <stdio.h>
#include <string.h>
const int inf=1<<30;
const int V=105;
int n;
double map1[V][V];
char s[35][200];
int find1()
{
char s1[200];
scanf("%s",s1);
for(int i=0; i<n; i++)
{
if(strcmp(s[i],s1)==0)
{
return i;
}
}
}
void flody(int n)
{
int i,j,k;
for(k=0; k<n; k++)
{
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
if(map1[i][j]<map1[i][k]*map1[k][j])
{
map1[i][j]=map1[i][k]*map1[k][j];
}
}
}
}
}
int main()
{
int in=1;
while(scanf("%d",&n),n)
{
int i,j,t,a,b,flat=0;
double d;
for(i=0; i<n; i++)
{
scanf("%s",s[i]);
}
scanf("%d",&t);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
map1[i][j]=1.0;
}
}
for(i=0; i<t; i++)
{
a=find1();
scanf("%lf",&d);
b=find1();
map1[a][b]=d;
}
flody(n);
for(i=0;i<n;i++)
{
if(map1[i][i]>1.0)   //判断条件
{
flat=1;
}
}
if(flat)
{
printf("Case %d: Yes\n",in);
}
else
{
printf("Case %d: No\n",in);
}
in++;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: