标签:des style color java os io for ar
3 1.0 1.0 2.0 2.0 2.0 4.0
3.41
题意:给定画上n个点,求最短的线段把所有点连起来,简单的最小生成树
#include<stdio.h>
#include<math.h>
#include<iostream>
#include<algorithm>
using namespace std;
#define INF 999999
#define M 10005
int n;
int vis[M];
double map[M][M],l[M];
struct node
{
double x,y;
}p[M];
double dis(int x1,int y1,int x2,int y2) //计算距离
{
double k1=x1-x2;
double k2=y1-y2;
double k=k1*k1+k2*k2;
return sqrt(k);
}
int main ()
{
int i,j,k;
while(cin>>n)
{
for(i=1;i<=n;i++)
cin>>p[i].x>>p[i].y;
for(i=1;i<=n;i++)
for(j=i;j<=n;j++)
map[i][j]=map[j][i]=dis(p[i].x,p[i].y,p[j].x,p[j].y);
// 最小生成树Prime算法 模板而已
memset(vis,0,sizeof(vis));
for(i=1;i<=n;i++)
l[i]=map[1][i];
vis[1]=1; // 标记数组
double sum=0;
for(i=1;i<n;i++)
{
double min=INF;
for(j=1;j<=n;j++)
{
if(vis[j]==0 && l[j]<min)
{
min=l[j];
k=j;
}
}
sum+=min;
vis[k]=1;
for(j=1;j<=n;j++)
{
if(!vis[j] && l[j]>map[k][j])
l[j]=map[k][j];
}
}
printf("%.2lf\n",sum);
}
return 0;
}
hdu 1162 Eddy's picture,布布扣,bubuko.com
标签:des style color java os io for ar
原文地址:http://blog.csdn.net/fyxz1314/article/details/38581949