poj2031(最小生成树)
来源:互联网 发布:看小说软件 编辑:程序博客网 时间:2024/05/16 08:54
http://poj.org/problem?id=2031
题意:给若干三为坐标的点,(x,y,z,r)形成的球面。若两个球有重叠,则不用建连通桥,否则连通桥的长度为球面间的距离。问若要使球连通,则最少桥要多长?
思路:比平常的MST多了一个建图而已,今天突然发现memset对bool函数没有用啊。。。
#include <iostream>#include <cmath>#include <cstring>using namespace std;const int INF = (1 << 30) -1;struct node{double x;double y;double z;double r;};node a[201];bool v[202];double dis[202][202];double d[202];int n;double getdis(int i, int j){double d = sqrt((a[i].x-a[j].x)*(a[i].x-a[j].x) + (a[i].y-a[j].y)*(a[i].y-a[j].y) +(a[i].z-a[j].z)*(a[i].z-a[j].z));if (d > a[i].r+a[j].r) return d - a[i].r-a[j].r;else return 0;}double prime(int n){memset(v,sizeof(v),0);memset(d,sizeof(d),0);v[0] = 1;double min;int k;double ans = 0;for (int i = 1; i < n; i++){d[i] = dis[0][i];v[i] = 0;//cout << ":" << d[i] << endl;}for (int i = 1; i < n; i++){min = INF;for (int j = 0; j < n; j++){//cout << "*" << j << " : " << v[j] << endl;if (!v[j] && d[j] < min){k = j;min = d[j];//cout <<"::" <<min << endl;}}ans += min;v[k] = 1;for (int j = 0; j < n; j++)if (!v[j] && dis[k][j] < d[j])d[j] = dis[k][j];}return ans;}int main(){while(cin >> n && n != 0){memset(dis,sizeof(dis),0);for (int i = 0; i < n; i++)cin >> a[i].x >> a[i].y >> a[i].z >> a[i].r;for (int i = 0; i < n; i++)for (int j = 0; j < n; j++)if (i != j){dis[i][j] = getdis(i,j);//cout << i+1 << " " << j+1 << ":" << dis[i][j] << endl;}else dis[i][j] = INF;printf("%.3f\n", prime(n)); }}
0 0
- poj2031(最小生成树)
- poj2031(最小生成树)
- POJ2031(最小生成树)
- poj2031 最小生成树
- poj2031 最小生成树
- POJ2031 最小生成树
- 最小生成树之poj2031
- <模板>poj2031 Building a Space Station(最小生成树)
- POJ2031 Building a Space Station(最小生成树,prim)
- poj2031最小生成树(建图)(注意c++与g++的区别)
- poj2031-Building a Space Station(最小生成树,kruskal,prime)
- POJ2031--Building a Space Station--最小生成树
- poj2031 Building a Space Station 最小生成树,kruskal
- POJ2031-Building a Space Station -最小生成树
- poj2031 Building a Space Station 三维空间的最小生成树
- POJ2031,Building a Space Station,最小生成树模版题
- 【POJ2031】【最小生成树】【g++ f c++ lf】
- poj2031 Building a Space Station(最小生成树)
- 让你提前认识软件开发(23):如何在C语言中执行shell命令?
- 【redis源码分析】数字集合--intset
- uva 10400 Game Show Math (填合适的运算符)
- Longest Ordered Subsequence (最长有序(递增)序列)
- leetcode: Palindrome Partitioning II
- poj2031(最小生成树)
- MongoDB_09之计数去重分组等
- CreateDirectory(…)执行失败,GetLastError()返回错误码5
- UVa 216 - Getting in Line
- -jQuery图片九宫格样式鼠标悬停图片滑动切换效果
- java泛型总结
- Oracle JOB定时任务
- WebGL开源项目研究之ViziCities
- Java中的Timer和TimerTask在Android中的用法