poj2560

//prim最小生成树直接prim算法,写了这么多了还是没背下来啊 ……#//prim

#include<stdio.h>

#include<math.h>

#include<string.h>

#include<stdlib.h>

#define Max 110

#define inf 100000000

 

float map[Max][Max],d[Max],point[Max][2],sum;

int used[Max],n;

 

float dis(float a,float b,float c,float d)

{

return sqrt((c-a)*(c-a)+(d-b)*(d-b));

}

 

void prim()

{

int i,j,k;

float min;

for(i=1;i<=n;i++)

d[i]=map[1][i];

used[1]=1;

 

for(i=1;i<n;i++)

{

min=inf;

for(j=2;j<=n;j++)

{

if(!used[j]&&min>d[j])

{

min=d[j];

k=j;

}

}

if(min==inf)

return ;

sum+=min;

used[k]=1;

for(j=2;j<=n;j++)

{

if(!used[j]&&d[j]>map[j][k])

d[j]=map[j][k];

}

}

printf("%.2f/n",sum);

 

}

int main()

{

int i,j;

scanf("%d",&n);

for(i=1;i<=n;i++)

scanf("%f%f",&point[i][0],&point[i][1]);

// memset(map,inf,sizeof(map));

for(i=1;i<=n;i++)

{

for(j=1;j<=n;j++)

{

if(i==j)

map[i][j]=inf;

else

map[i][j]=map[j][i]=dis(point[i][0],point[i][1],point[j][0],point[j][1]);

}

}

 

sum=0.0;

memset(used,0,sizeof(used));

prim();

return 0;

}

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值