开始用cin和cout,结果Tl,改成C, WR了n 次,最后发现竟然是因为输入double型数据时用了%f……
#include<stdio.h>
#include<string.h>
double map[31][31];
void Floyd(int n)
{
int i, j, k;
for(k=1; k<=n; k++)
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
if( map[i][j]<map[i][k]*map[k][j])
map[i][j]=map[i][k]*map[k][j];
}
int main()
{
char name[31][100];
char str1[100], str2[100];
double rate;
int temp1, temp2;
int n, m, flag, Case=0;
int i, j;
while( scanf("%d", &n) && n)
{
flag=0;
for(i=1; i<=n; i++)
scanf("%s", name[i]);
scanf("%d", &m);
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
{
if( i!=j ) map[i][j]=0;
else map[i][j]=1;
}
for(i=1; i<=m; i++)
{
scanf("%s %lf %s", str1, &rate, str2);
for(j=1; j<=n; j++)
if( strcmp(str1, name[j])==0 )
{
temp1=j;break;
}
for(j=1; j<=n; j++)
if( strcmp(str2, name[j])==0)
{
temp2=j;break;
}
map[temp1][temp2]=rate;
}
Floyd( n );
for(i=1; i<=n; i++)
if( map[i][i]>1 )
{
flag=1;break;
}
Case++;
if( flag ) printf("Case %d: Yes\n",Case);
else printf("Case %d: No\n",Case);
}
}