【POJ】[2031]Building a Space Station
2016-02-20 04:57
477 查看
给出球心的位置(x,y,z)和半径(r),如果两球相离,那么两球之间的距离是两球心间的距离减去两半径,否则两球之间的距离为0
要求所有的点都相连并输出最小的距离和
感觉就是3D版的
【杭电】[1875]畅通工程再续
不过好像比那个还简单些
思路还是根据点求出来边长
注意的是如果两圆不相离 那么距离为0
相离了是两表面的最短距离
记得两点距离减去半径
英语还是硬伤啊……
还有就是不知道为什么C++能过……
G++好多都WA了……
看算法……
也暂时不考虑这个问题了
[code]#include<stdio.h> #include<math.h> #include<algorithm> using namespace std; struct xyz { double x,y,z,r; } a[120]; int main() { double dis[120]; double e[120][120]; bool flag[120]; double inf=999999; int N; while(scanf("%d",&N),N) { for(int i=1; i<=N; i++) { dis[i]=inf; flag[i]=false; } for(int i=1; i<=N; i++) { for(int j=1; j<=N; j++) { e[i][j]=inf; } } for(int i=1; i<=N; i++) { scanf("%lf %lf %lf %lf",&a[i].x,&a[i].y,&a[i].z,&a[i].r); for(int j=1; j<=N; j++) { if(i==j) continue; else { double l=sqrt(pow(a[i].x-a[j].x,2)+pow(a[i].y-a[j].y,2)+pow(a[i].z-a[j].z,2)); if(l>a[i].r+a[j].r) { e[j][i]=e[i][j]=l-a[i].r-a[j].r; } else { e[j][i]=e[i][j]=0; } } } } double sum=0; dis[1]=0; while(true) { int v=-1; for(int u=1; u<=N; u++) { if(!flag[u]&&(v==-1||dis[u]<dis[v])) v=u; } if(v==-1) break; flag[v]=true; sum+=dis[v]; for(int u=1; u<=N; u++) { dis[u]=min(dis[u],e[v][u]); } } printf("%.3lf\n",sum); } return 0; }
题目地址:【POJ】[2031]Building a Space Station
相关文章推荐
- 使用 dbms_xplan.display 按照 plan_hash_value 查执行计划的方法
- Entity Framework Fluent API
- JSP中四种属性范围(pageContext,request)
- 非UI线程在休眠与不休眠情况下更新UI的原理分析
- 简单的UIPickView功能
- poj 1019 Number Sequence 找规律 思维题 ()
- Android Wear 进阶 - 3 Creating Custom UIs for Wear Devices 创建自定义的手表设备UIs
- Light OJ 1421 Wavio Sequence (简单DP)
- Hdu 2604 Queuing【矩阵快速幂】
- 【POJ】2031 - Building a Space Station(克鲁斯塔尔)
- [Introduction to programming in Java 笔记] 1.3.8 Gambler's ruin simulation 赌徒破产模拟
- iOS 【UIKit-iOS常用控件尺寸大集合 】
- iOS开发-数据选择UIPickerView(案例三)
- iOS开发-数据选择UIPickerView(案例二)
- iOS开发-数据选择UIPickerView(案例一)
- 诺看看图王 (基于DUI SOUI 库开发而成)
- iOS-UI-基本控件之UIView
- 【SPOJ-GSS6】Can you answer these queries VI【Splay】
- UI整理-----part3--UITableView
- EasyUI系列学习(八)-ProgressBar(进度条)