标签:
Eddy‘s pictureeddy
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int inf=0x3fffffff;
double cost[107][107];
double ans;
int n;
struct node
{
double x,y;
};
node e[10007];
bool used[107];
double dis[107];
void prim()
{
for(int i=1;i<=n;i++)
{
dis[i]=inf;
used[i]=0;
}
dis[1]=0;
while(1){
int v=-1;
for(int i=1;i<=n;i++)
{
if(!used[i]&&(v==-1||dis[i]<dis[v])) v=i;
}
if(v==-1) break;
used[v]=1;
for(int i=1;i<=n;i++)
{
if(!used[i]) dis[i]=min(dis[i],cost[v][i]);
}
}
// for(int i=1;i<=n;i++)
// printf("%.2lf ",dis[i]);
}
int main()
{
//freopen("in.txt","r",stdin);
while(~scanf("%d",&n)){
memset(e,0,sizeof(e));
for(int i=0;i<=n;i++)
for(int j=0;j<=n;j++)
if(j==i) cost[i][j]=0;
else cost[i][j]=inf;
for(int i=1;i<=n;i++) scanf("%lf%lf",&e[i].x,&e[i].y);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
cost[i][j]=cost[j][i]=sqrt((e[i].x-e[j].x)*(e[i].x-e[j].x)+(e[i].y-e[j].y)*(e[i].y-e[j].y));
}
prim();
ans=inf;
double sum=0;
for(int i=1;i<=n;i++)
{
sum+=dis[i];
}
printf("%.2lf\n",sum);
}
return 0;
}
标签:
原文地址:http://blog.csdn.net/yuanchang_best/article/details/43163717