| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
大牛,帮帮忙,看看这个程序,wrong了无数此了,不明白#include <stdio.h>
#include <string.h>
float a;
char s[1000][21];
int n,m;
float p[1000][1000]={0};
struct edge
{
int i, j;
float w;
};
edge e[1000];
int main()
{
int i,k;
char buf1[30], buf2[30];
float tmp;
int x,y;
scanf("%f",&a);
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s",s[i]);
}
scanf("%d",&m);
for(i=0;i<m;i++)
{
scanf("%s %s %f",buf1, buf2, &tmp);
x=0;
y=0;
for(k=0;k<n;k++)
{
if(x&&y)
break;
if(strcmp(s[k], buf1) == 0)
x=k;
else if(strcmp(s[k], buf2) == 0)
y=k;
}
p[x][y]=tmp;
p[y][x]=tmp;
}
for(i=0;i<n-1;i++)
{
e[i].i=0;
e[i].j=i+1;
e[i].w=p[0][i+1];
}
float min,max=32767;
int m,v;
edge t1;
for(i=0;i<n-1;i++)
{
min=max;
m=-1;
for(k=i;k<n-1;k++)
{
if(e[k].w>0 && e[k].w < min)
{
min=e[k].w;
m=k;
}
}
if(m==-1)
{
break;
min=a+100;
}
t1=e[m];e[m]=e[i];e[i]=t1;
v=e[i].j;
for(k=i+1;k<n-1;k++)
{
min=p[v][e[k].j];
if(min>0 && min < e[k].w)
{
e[k].w=min;
e[k].i=v;
}
}
}
min=0;
for(i=0;i<n-1;i++)
{
min+=e[i].w;
}
if(min<=a)
{
printf("Need %.1f miles of cable\n",min);
}
else{
printf("Not enough cable\n");
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator