Floyd算法的应用--POJ 2240

该题大意是套汇问题,货币根据汇率转换来套取多余的钱数,由于是各个货币两两转换,即由Floyd判环应用变形则可解决问题。

Floyd算法用于解决任意两个节点之间的最短距离,判断是否成环等,其实质为动态规划。


1
/*Floyd算法的应用*/
2 #include<iostream>
3 #include<cmath>
4 #include<cstring>
5 using namespace std;
6 char cur[31][20];
7 double map[31][31];
8
9 int main()
10 {
11 int n,m,i,j,k,x,y,flag,kk=0;
12 char c1[20],c2[20];
13 double t,rate;
14 while(cin>>n&&n!=0)
15 {
16 kk++;
17 for(i=0;i<n;i++)
18 cin>>cur[i];
19 cin>>m;
20 flag=0;
21 memset(map,0,sizeof(map));
22 for(i=0;i<m;i++)
23 {
24 cin>>c1>>rate>>c2;
25 for(j=0;j<n;j++)
26 {
27 if(strcmp(c1,cur[j])==0)
28 x=j;
29 if(strcmp(c2,cur[j])==0)
30 y=j;
31 }
32 map[x][y]=rate;
33 }
34 for(k=0;k<n;k++)
35 for(i=0;i<n;i++)
36 for(j=0;j<n;j++)
37 {
38 t=map[i][k]*map[k][j];
39 if(t>map[i][j])
40 map[i][j]=t;
41 }
42 for(i=0;i<n;i++)
43 if(map[i][i]>1.0)
44 {
45 flag=1;
46 break;
47 }
48 if(flag==0)
49 cout<<"Case "<<kk<<": No"<<endl;
50 else
51 cout<<"Case "<<kk<<": Yes"<<endl;
52 }
53 return 0;
54 }

后天就要有选拔赛了,也知道自己的水平如何,只需放心大胆的去做,不需在乎成绩,只求会的作对,加油!

posted @ 2012-02-17 18:25  hankers  阅读(351)  评论(0编辑  收藏  举报