您的位置:首页 > 其它

zoj 1092 Arbitrage(最短路,floyd)

2011-10-25 12:43 375 查看
最短路的floyd算法,具体说,理解的还不透彻啊!!!还得刷,还得刷!刚开始数据输入和记录方法采用的是zoj 1952的方法,但是改了好几次一直WA。。。和媛姐的对照了一下,改了改数据记录方式。。。。
#include<stdio.h>
#include<string.h>
typedef struct ss
{
char s[100];
}node;
node a[500];
int n,r,p,tx,ty;
char s1[100],s2[100];
double w[32][32],ww;
void sort()
{
int i,j,t;
for(i=0;i<r;i++)
{
scanf("%s%lf%s",s1,&ww,s2);
for(t=0,j=0;t!=2;j++)
{
if(strcmp(s1,a[j].s)==0)
{
t++;
tx=j;
}
if(strcmp(s2,a[j].s)==0)
{
t++;
ty=j;
}
}
w[tx][ty]=ww;
}
}
int main()
{
int i,j,ncase=1,flag;
while(scanf("%d",&n)&&n)
{
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
if(i==j) w[i][j]=1.0;
else  w[i][j]=0.0;
}
flag=0;
for(i=0;i<n;i++)
scanf("%s",a[i].s);
scanf("%d",&r);
sort();
for(int k=0;k<n;k++)
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(w[i][j]<w[i][k]*w[k][j])
w[i][j]=w[i][k]*w[k][j];
for(i=0;i<n;i++)
if(w[i][i]>1)
{
flag=1;
break;
}
if(flag) printf("Case %d: Yes\n",ncase++);
else  printf("Case %d: No\n",ncase++);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: