【floyd】 poj 2240

#include <iostream>

#include <map>

#include <string>

#include <memory.h>



using namespace std;

const int inf=10000;

int n;      //货币种类

int m;      //兑换方式

mapSTL;     //建立一个字符串与整数一一对应的容器STL,以便利用邻接矩阵存储数据

double rate;

char str[50],str1[50],str2[50];

double dis[31][31];

int i,j,k;

void floyd(void)

{

 for(k=1;k<=n;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];

 return;

}

int main()

{

// freopen("in.txt","r",stdin);

 int cases=1;

 while(cases)

 {

  memset(dis,inf,sizeof(dis));

  cin>>n;

  if(!n)break;

  for(i=1;i<=n;i++)

  {

   cin>>str;

   STL[str]=i;          //将输入的货币从1到n依次编号

   dis[i][i]=1;        //到自身的转换率默认为1,但通过floyd可能会被改变

  }

  cin>>m;

  for(i=1;i<=m;i++)

  {

   cin >> str1 >> rate >> str2;

   dis[STL[str1]][STL[str2]]=rate;      //构造图

  }

  floyd();

  int flag=false;

  for(i=1;i<=n;i++)

   if(dis[i][i]>1)

   {

    flag=true;

    break;

   }

   if(flag)

   cout<<"Case "<<cases++<<": Yes"<<endl;

  else

   cout<<"Case "<<cases++<<": No"<<endl;

 }

 return 0;

}

 

你可能感兴趣的:(floyd)