poj 2031

来源:互联网 发布:二十四节气小雪知乎 编辑:程序博客网 时间:2024/05/16 15:25
#include<cmath>#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>using namespace std;const int maxn=100010,maxm=500;double inf=999999999.000;struct node{double x,y,z,r;}a[maxn];double e[maxm][maxm];double dis[maxn];int p[maxn];int main(){int i,j,k,n,m,end;double sum;while(1){scanf("%d",&m);sum=0.000;if(m==0)break;memset(p,0,sizeof(p));for(i=1;i<=m;i++)for(j=1;j<=m;j++)if(i==j)e[i][j]=0;else e[i][j]=inf;for(i=1;i<=m;i++)scanf("%lf%lf%lf%lf",&a[i].x,&a[i].y,&a[i].z,&a[i].r);for(i=1;i<m;i++)for(j=i+1;j<=m;j++){e[i][j]=e[j][i]=sqrt(sqrt((a[j].x-a[i].x)*(a[j].x-a[i].x)+(a[j].y-a[i].y)*(a[j].y-a[i].y))*sqrt((a[j].x-a[i].x)*(a[j].x-a[i].x)+(a[j].y-a[i].y)*(a[j].y-a[i].y))+(a[j].z-a[i].z)*(a[j].z-a[i].z))-a[i].r-a[j].r>0?sqrt(sqrt((a[j].x-a[i].x)*(a[j].x-a[i].x)+(a[j].y-a[i].y)*(a[j].y-a[i].y))*sqrt((a[j].x-a[i].x)*(a[j].x-a[i].x)+(a[j].y-a[i].y)*(a[j].y-a[i].y))+(a[j].z-a[i].z)*(a[j].z-a[i].z))-a[i].r-a[j].r:0; }int cnt=1;for(i=1;i<=m;i++)dis[i]=e[1][i];p[1]=1;while(cnt<m){double min=inf;for(i=1;i<=m;i++){if(!p[i]&&dis[i]<min){min=dis[i];end=i;}}cnt++;p[end]=1;sum+=dis[end];for(j=1;j<=m;j++){if(!p[j]&&dis[j]>e[end][j])dis[j]=e[end][j];}}printf("%.3f\n",sum);}return 0;}

0 0
原创粉丝点击