杭电 hdu 1875 畅通工程再续 不知道错哪里了?一直wa!
#include<stdio.h>#include<string.h>#include<math.h>#defineMAXN110#defineINF100000000i...
#include<stdio.h>
#include<string.h>
#include<math.h>
#define MAXN 110
#define INF 100000000
int a[MAXN][MAXN],Visited[MAXN];
double Map[MAXN][MAXN],Dis[MAXN];
struct locate
{
int x;
int y;
} locate[MAXN];
int prim(int s,int n)
{
int i,j,t;
double min,distance=0;
Visited[s]=1;
for(i=1;i<=n;i++)
Dis[i]=Map[s][i];
for(i=1;i<=n;i++)
{
min=INF;
for(j=1;j<=n;j++)
{
if(!Visited[j]&&min>Dis[j])
{
t=j;
min=Dis[j];
}
}
if(min!=INF)
{
distance+=(min*100);
Visited[t]=1;
for(j=1;j<=n;j++)
{
if(!Visited[j]&&Dis[j]>Map[t][j])
Dis[j]=Map[t][j];
}
}
}
printf("%0.1lf\n",distance);
return 0;
}
int main()
{
int n,m,i,j,a,b,flag=1;
double temp;
scanf("%d",&n);
while(n--)
{
memset(Visited,0,sizeof(Visited));
scanf("%d",&m);
for(i=1;i<=m;i++)
{
scanf("%d%d",&locate[i].x,&locate[i].y);
for(j=i;j>=1;j--)
{
a=locate[i].x-locate[j].x;
b=locate[i].y-locate[j].y;
temp=sqrt(a*a+b*b);
if((temp>1000||temp<10)&&i!=j)
{
flag=0;
}
Map[j][i]=Map[i][j]=temp;
}
}
if(flag)
prim(1,m);
else
{
printf("oh!\n");
}
}
return 0;
}
或者给我一些测试数据吧!!! 展开
#include<string.h>
#include<math.h>
#define MAXN 110
#define INF 100000000
int a[MAXN][MAXN],Visited[MAXN];
double Map[MAXN][MAXN],Dis[MAXN];
struct locate
{
int x;
int y;
} locate[MAXN];
int prim(int s,int n)
{
int i,j,t;
double min,distance=0;
Visited[s]=1;
for(i=1;i<=n;i++)
Dis[i]=Map[s][i];
for(i=1;i<=n;i++)
{
min=INF;
for(j=1;j<=n;j++)
{
if(!Visited[j]&&min>Dis[j])
{
t=j;
min=Dis[j];
}
}
if(min!=INF)
{
distance+=(min*100);
Visited[t]=1;
for(j=1;j<=n;j++)
{
if(!Visited[j]&&Dis[j]>Map[t][j])
Dis[j]=Map[t][j];
}
}
}
printf("%0.1lf\n",distance);
return 0;
}
int main()
{
int n,m,i,j,a,b,flag=1;
double temp;
scanf("%d",&n);
while(n--)
{
memset(Visited,0,sizeof(Visited));
scanf("%d",&m);
for(i=1;i<=m;i++)
{
scanf("%d%d",&locate[i].x,&locate[i].y);
for(j=i;j>=1;j--)
{
a=locate[i].x-locate[j].x;
b=locate[i].y-locate[j].y;
temp=sqrt(a*a+b*b);
if((temp>1000||temp<10)&&i!=j)
{
flag=0;
}
Map[j][i]=Map[i][j]=temp;
}
}
if(flag)
prim(1,m);
else
{
printf("oh!\n");
}
}
return 0;
}
或者给我一些测试数据吧!!! 展开
1个回答
展开全部
输入:
1
3
1 1
10 10
12 1
问题所在:
if((temp>1000||temp<10)&&i!=j)
{
flag=0;
}
Map[j][i]=Map[i][j]=temp;
}
}
if(flag)
prim(1,m);
按照顺序定义顶点编号为:1,2,3 2,3距离小于10时只能说2,3之间不能建桥,flag=0,不执行prim(),但1,3满足 ,并不代表全不满足 ,应该使2,3距离最大
1
3
1 1
10 10
12 1
问题所在:
if((temp>1000||temp<10)&&i!=j)
{
flag=0;
}
Map[j][i]=Map[i][j]=temp;
}
}
if(flag)
prim(1,m);
按照顺序定义顶点编号为:1,2,3 2,3距离小于10时只能说2,3之间不能建桥,flag=0,不执行prim(),但1,3满足 ,并不代表全不满足 ,应该使2,3距离最大
追问
我在这里纠结了半天,没想到怎么搞,谢了,分就给你吧!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询