第一次写floyd ,核心代码只有5行。不过O(n^3)
#include <iostream>
#include <stdio.h>
#include <string>
#include <memory.h>
using namespace std;
double dis[35][35];
char str1[40],str2[40],str[40][40];
double rate;
int n,m;
const int inf=1e8;
int findbuf(char *s)
{ for(int i=1;i<=n;i++)
if(strcmp(s,str[i])==0)
return i;
}
void floyd()
{ 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()
{
int cas=1;
while(scanf("%d",&n),n)
{
memset(dis,inf,sizeof(dis));
for(int i=1;i<=n;i++)
{
scanf("%s",str[i]);
dis[i][i]=1;
}
scanf("%d",&m);
for(int i=1;i<=m;i++)
{
scanf("%s%lf%s",str1,&rate,str2);
dis[findbuf(str1)][findbuf(str2)]=rate;
}
floyd();
int flag=0;
for(int i=1;i<=n;i++)
if(dis[i][i]>1)
flag=1;
if(flag)
printf("Case %d: Yes\n",cas++);
else
printf("Case %d: No\n",cas++);
}
}