POJ 2240 Arbitrage

mac2022-06-30  102

这个题也是十分水的题,节点最多只有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; }

转载于:https://www.cnblogs.com/lin375691011/p/3996824.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)