POJ 2031 Building a Space Station 简单计算几何 + 最小生成树
2013-08-29 17:01
429 查看
如题 :简单计算几何 + 最小生成树
求出连个cell的距离 小于零距离为零 否者就是两球心的距离减两球半径
因为边较少所以用邻接矩阵存储 最后用一个prim计算最小生成树 答案就出来了
注意 :POJ在G++中编译的 输出浮点型都要用f 不能用lf
下面看代码:
求出连个cell的距离 小于零距离为零 否者就是两球心的距离减两球半径
因为边较少所以用邻接矩阵存储 最后用一个prim计算最小生成树 答案就出来了
注意 :POJ在G++中编译的 输出浮点型都要用f 不能用lf
下面看代码:
#include<cstdio> #include<cmath> #include<cstring> #define eps 1e-8 #define N 105 #define MAX 0x3fffffff using namespace std; struct cell { double x,y,z,r; }c ; double Dis(cell a,cell b) { return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)+(a.z-b.z)*(a.z-b.z)); } int n; double edge ,res,dis ; bool flag ; double prim(int s) { for(int i = 0; i <= N; i++) dis[i] = MAX; memset(flag,false,sizeof(flag)); dis[s]=0; flag[s]=true; for(int i=1; i<=n; i++) { if(dis[i]>edge[s][i]) dis[i]=edge[s][i]; } for(int i=1; i<n; i++) { int pos=-1; double Min=0x3f3f3f3f; for(int j=1; j<=n; j++) { if(!flag[j]&&dis[j]<Min) { Min=dis[j]; pos=j; } } if(pos==-1) return -1; res += Min; flag[pos]=true; for(int j=1; j<=n; j++) { if(!flag[j]&&edge[pos][j]<dis[j]) dis[j]=edge[pos][j]; } } return res; } int main() { #ifdef LOCAL freopen("in.txt","r",stdin); #endif // LOCAL int i,j; while((scanf("%d",&n),n)!=0) { for(i = 1;i <=n; i++) scanf("%lf%lf%lf%lf",&c[i].x,&c[i].y,&c[i].z,&c[i].r); for(i = 1; i<=n; i++) for(j = 1; j<=n; j++) { if(i == j){edge[i][j] = MAX;continue;} double d = Dis(c[i],c[j])-c[i].r-c[j].r; if(d < eps) edge[i][j] = 0; else edge[i][j] = d; } res = 0; double result = prim(1); printf("%.3f\n",result); } return 0; }
相关文章推荐
- hdu4606 Occupy Citie 简单计算几何,最小路径覆盖
- 【ZOJ3919 2016年浙大2月月赛E】【简单计算几何 贪心】Ellipse 椭圆内切圆外切平行四边形最大最小面积
- poj 2031 Building a Space Station(计算几何+最小生成树)
- Communication Planning for Phobos 最小生成树加计算几何
- HOJ 1614 Communication Planning for Phobos(最小生成树 计算几何)
- poj_2031 Building a Space Station(计算几何+最小生成树)
- poj 1258 Agri-Net(简单最小生成树)
- HDU 6080 度度熊保护村庄(计算几何+最小环-Floyd)
- POJ 1789 Truck History【最小生成树简单应用】
- POJ - 1789 Truck History(最小生成树简单题)
- HDU 4720 Naive and Silly Muggles (简单计算几何)
- [U]3.1.1 Agri-Net 简单的最小生成树问题Ford
- 计算几何 三点求最小圆
- POJ 1258 (简单最小生成树,prim算法)
- 计算几何--简单多边形与圆面积交
- 【BZOJ1185】最小矩形覆盖 计算几何 凸包 旋转卡壳
- POJ 1106 Transmitters (简单计算几何)
- POJ 1789 Truck History【最小生成树简单应用】
- Prim算法计算最小生成树之和
- POJ - 2421 Constructing Roads(最小生成树简单题)