POJ 2031 Building a Space Station 最小生成树模板
题目大意:在三维坐标中给出n个细胞的x,y,z坐标和半径r。如果两个点相交或相切则不用修路,否则修一条路连接两个细胞的表面,求最小生成树。
题目思路:最小生成树树模板过了,没啥说的
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<queue>
#define INF 0x3f3f3f3f
#define MAX 1005 using namespace std; double x[MAX],y[MAX],z[MAX],r[MAX],Map[MAX][MAX],dist[MAX];
int n,vis[MAX]; double Dist(int a,int b)//计算两球心距离
{
double k1=x[a]-x[b];
double k2=y[a]-y[b];
double k3=z[a]-z[b];
return sqrt(k1*k1+k2*k2+k3*k3);
} void prm()
{
int i,j,k;
double minn,sum=;
vis[]=;
for(i=;i<=n;i++)
dist[i]=Map[][i];
for(i=;i<n;i++)
{
minn=INF;
for(j=;j<=n;j++)
{
if(!vis[j]&&dist[j]<minn)
{
minn=dist[j];
k=j;
}
}
if(minn==INF)
break;
sum+=dist[k];
vis[k]=;
for(j=;j<=n;j++)
{
if(Map[k][j]<dist[j] && !vis[j])
{
dist[j]=Map[k][j];
}
}
}
printf("%.3lf\n",sum);
} int main()
{
int i,j;
while(scanf("%d",&n),n)
{
for(i=;i<MAX;i++)
for(j=;j<MAX;j++)
Map[i][j]=INF;
memset(vis,,sizeof(vis));
memset(dist,,sizeof(dist));
for(i=;i<=n;i++)
{
scanf("%lf%lf%lf%lf",&x[i],&y[i],&z[i],&r[i]);
}
for(i=;i<=n;i++)
{
for(j=;j<=n;j++)
{
if(i!=j)
{
double d=Dist(i,j);
if(d>(r[i]+r[j]))
{
Map[i][j]=Map[j][i]=min(Map[i][j],(d-r[i]-r[j]));
}
else
{
Map[i][j]=Map[j][i]=;
}
}
}
}
prm();
}
return ;
}
POJ 2031 Building a Space Station 最小生成树模板的更多相关文章
- POJ 2031 Building a Space Station (最小生成树)
		
Building a Space Station Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 5173 Accepte ...
 - poj 2031 Building a Space Station【最小生成树prime】【模板题】
		
Building a Space Station Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 5699 Accepte ...
 - POJ 2031 Building a Space Station【经典最小生成树】
		
链接: http://poj.org/problem?id=2031 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22013#probl ...
 - POJ 2031	  Building a Space Station (最小生成树)
		
Building a Space Station 题目链接: http://acm.hust.edu.cn/vjudge/contest/124434#problem/C Description Yo ...
 - POJ 2031 Building a Space Station
		
3维空间中的最小生成树....好久没碰关于图的东西了..... Building a Space Station Time Limit: 1000MS Memory Li ...
 - POJ - 2031 Building a Space Station 三维球点生成树Kruskal
		
Building a Space Station You are a member of the space station engineering team, and are assigned a ...
 - POJ 2031 Building a Space Station (计算几何+最小生成树)
		
题目: Description You are a member of the space station engineering team, and are assigned a task in t ...
 - POJ 2031 Building a Space Station【最小生成树+简单计算几何】
		
You are a member of the space station engineering team, and are assigned a task in the construction ...
 - [ An Ac a Day ^_^ ][kuangbin带你飞]专题六 最小生成树  POJ 2031 Building a Space Station
		
最小生成树模板题 注意最后输出用%f (从C99开始%f已经不能用于输出double 即 输入用%lf 输出用%f) #include<cstdio> #include<algori ...
 
随机推荐
- java.lang.ClassNotFoundException: com.mysql.jdbc.Driver问题
			
java.lang.ClassNotFoundException: com.mysql.jdbc.Driverat org.apache.catalina.loader.WebappClassLoad ...
 - Java Object 引用传递和值传递
			
Java Object 引用传递和值传递 @author ixenos Java没有引用传递: 除了在将参数传递给方法(或函数)的时候是"值传递",传递对象引用的副本,在任何用&q ...
 - 导入excel表格的数据--->到mysql中
			
01下载excel类,将Classes文件夹放入ThinkPHP\Extend\Vendor\位置 下载地址 http://phpexcel.codeplex.com/releases/view/26 ...
 - 二维小波包重构wprec2\wprcoef
			
clc,clear all,close all; load woman; t=wpdec2(X,2,'haar');%小波包2层分解 r_X=wprec2(t);%重构小波包 r_X10=wprcoe ...
 - openwrt 中procd
			
https://wiki.openwrt.org/doc/techref/procd Procd:Openwrt的进程管理守护进程(process management daemon),它与初始化脚本 ...
 - lua中获取时间
			
os.date() 返回 XX/XX/XX XX:XX:XX 月/日/年 时:分:秒 os.time() 返回的是从1970年1月1日到现在的经过的秒数. 例如: print(os. ...
 - Leetcode 289 Game of Life
			
According to the Wikipedia's article: "The Game of Life, also known simply as Life, is a cellul ...
 - 9.创建一个三角形类,成员变量三边,方法求周长,创建类主类A来测试它。
			
package com.hanqi.test; public class Triangle { private double a,b,c; public Triangle(double d,doubl ...
 - Python笔记2-20151023
			
一.循环 Python的循环有两种,一种是for...in循环,依次吧list或tuple中的每个元素迭代出来. >>>names = ['Michael','Bob','Tracy ...
 - Core Animation中的组动画
			
实际开发中一个物体的运动往往是复合运动,单一属性的运动情况比较少,但恰恰属性动画每次进行动画设置时一次只能设置一个属性进行动画控制(不管是 基础动画还是关键帧动画都是如此),这样一来要做一个复合运动的 ...