日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

poj 2031Building a Space Station(几何判断+Kruskal最小生成树)

發布時間:2025/3/8 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 poj 2031Building a Space Station(几何判断+Kruskal最小生成树) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1 /* 2 最小生成樹 + 幾何判斷 3 Kruskal 球心之間的距離 - 兩個球的半徑 < 0 則說明是覆蓋的!此時的距離按照0計算 4 */ 5 #include<iostream> 6 #include<cstdio> 7 #include<cstring> 8 #include<cmath> 9 #include<algorithm> 10 using namespace std; 11 int f[105]; 12 struct ball{ 13 double x, y, z, r; 14 }; 15 16 struct connect{ 17 double dist; 18 int a, b; 19 }; 20 21 connect c[5005]; 22 23 ball b[105]; 24 25 bool cmp(connect a, connect b){ 26 return a.dist < b.dist; 27 } 28 int n; 29 30 int getFather(int x){ 31 return x==f[x] ? x : f[x]=getFather(f[x]); 32 } 33 34 int Union(int a, int b){ 35 int fa=getFather(a), fb=getFather(b); 36 if(fa!=fb){ 37 f[fa]=fb; 38 return 1; 39 } 40 return 0; 41 } 42 43 int main(){ 44 int i, j; 45 while(scanf("%d", &n) && n){ 46 for(i=1; i<=n; ++i) 47 scanf("%lf%lf%lf%lf", &b[i].x, &b[i].y, &b[i].z, &b[i].r); 48 int cnt=0; 49 for(i=1; i<n; ++i) 50 for(j=i+1; j<=n; ++j){ 51 double d = sqrt((b[i].x-b[j].x)*(b[i].x-b[j].x) + (b[i].y-b[j].y)*(b[i].y-b[j].y) + (b[i].z-b[j].z)*(b[i].z-b[j].z)) 52 - (b[i].r + b[j].r); 53 c[cnt].dist= d<0 ? 0: d; 54 c[cnt].a=i; 55 c[cnt++].b=j; 56 } 57 sort(c, c+cnt, cmp); 58 double minSum=0.0; 59 for(i=1; i<=n; ++i) 60 f[i]=i; 61 for(i=0; i<cnt; ++i){ 62 if(Union(c[i].a, c[i].b)) 63 minSum+=c[i].dist; 64 } 65 printf("%.3lf\n", minSum); 66 } 67 return 0; 68 }

?

轉載于:https://www.cnblogs.com/hujunzheng/p/3877502.html

總結

以上是生活随笔為你收集整理的poj 2031Building a Space Station(几何判断+Kruskal最小生成树)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。