杭电 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;
}
或者给我一些测试数据吧!!!
展开
 我来答
三毛0伍
2012-08-11 · 超过36用户采纳过TA的回答
知道小有建树答主
回答量:134
采纳率:0%
帮助的人:114万
展开全部
输入:
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距离最大
追问
我在这里纠结了半天,没想到怎么搞,谢了,分就给你吧!
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式