POJ 2240 Arbitrage(Floyd算法)

来源:互联网 发布:海康设备网络搜索软件 编辑:程序博客网 时间:2024/06/08 12:41




http://poj.org/problem?id=2240






通过各种货币之间 汇率的转换  能不能赚到钱  运用Floyd算法  求出最后其本身到本身的汇率是否大于1  大于1 就可以赚到钱



AC代码:

#include <stdio.h>  #include <string.h>  int n,m;  char name[50][50];  double map[50][50];  double dis[50][50];      void floyd(){            for (int i=1;i<=n;i++){          for (int j=1;j<=n;j++){              dis[i][j]=map[i][j];          }      }            for (int k=1;k<=n;k++){          for (int i=1;i<=n;i++){              for (int j=1;j<=n;j++){                  if (dis[i][j]<dis[i][k]*dis[k][j])// 钱币之间汇率转换                   {                      dis[i][j]=dis[i][k]*dis[k][j];                  }              }          }      }  }    int main  (){      char A[35];      char B[35];      double s;      int index1,index2;      int count=0;      while (scanf ("%d",&n)&&n){          getchar();          count++;          for (int i=1;i<=n;i++){              for (int j=1;j<=n;j++){                  map[i][j]=0;              }          }          for (int i=1;i<=n;i++){              gets(name[i]);          }           scanf("%d",&m);          getchar();          for (int i=0;i<m;i++){          scanf ("%s %lf %s",A,&s,B);              for (int j=1;j<=n;j++){                  if (strcmp(name[j],A)==0)                      index1=j;                  if (strcmp(name[j],B)==0)                      index2=j;              }               map[index1][index2]=s;          }                    floyd();                    if (dis[1][1]>1){              printf ("Case %d: Yes\n",count);          }          else{              printf ("Case %d: No\n",count);          }      }                  return 0;  }  


0 0
原创粉丝点击