poj2031(prime()double printf 不能用%lf)
来源:互联网 发布:千牛软件何用 编辑:程序博客网 时间:2024/05/22 19:26
大致题意:
就是给出三维坐标系上的一些球的球心坐标和其半径,搭建通路,使得他们能够相互连通。如果两个球有重叠的部分则算为已连通,无需再搭桥。求搭建通路的最小费用(费用就是边权,就是两个球面之间的距离)。
解题思路:
不要被三维吓到了,其实就是图论的最小生成树问题
球心坐标和半径是用来求 两点之间的边权 的,求出边权后,把球看做点,用邻接矩阵存储这个无向图,再求最小生成树,非常简单的水题。
把球A和球B看做无向图图的两个结点,那么
边权 = AB球面距离 = A球心到B球心的距离 – A球半径 – B球半径。
心塞….最后被一个输出卡了 一下午….double 输出用printf输出时 %lf不标准…可能不会四舍五入…..wrong了一下午…要么printf(“%.3f”,…)
或是 cout .
#include<iostream>#include<iomanip>#include<cstdio>#include<cstring>#include<cmath>#define eps 1e-8using namespace std;double M[220][220],dist[220];int book[220];struct Node{ double x,y,z,r;}node[220];int n;int EPS(double k){ if(fabs(k)<eps) return 0; return k>0?1:-1;}double dis(Node a,Node 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))-a.r-b.r;}double prime(int cur){ memset(book,0,sizeof(book)); book[cur]=1; for(int i=1;i<=n;i++) dist[i]=M[cur][i]; int index;double sum=0.0; for(int i=2;i<=n;i++) { double Min=999999.00000; for(int j=1;j<=n;j++) { if(!book[j]&&dist[j]<Min) { Min=dist[j]; index=j; } } book[index]=1; sum+=Min; for(int j=1;j<=n;j++) { if(!book[j]&&M[index][j]<dist[j]) dist[j]=M[index][j]; } } return sum;}int main(){ while(~scanf("%d",&n)&&n) { for(int i=1;i<=n;i++) scanf("%lf %lf %lf %lf",&node[i].x,&node[i].y,&node[i].z,&node[i].r); memset(M,0,sizeof(M)); for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { double d=dis(node[i],node[j]); if(EPS(d)<=0) M[i][j]=M[j][i]=0; else M[i][j]=M[j][i]=d; } } //cout<<fixed<<setprecision(3)<<prime(1)<<endl; printf("%.3f",prime()); }}
0 0
- poj2031(prime()double printf 不能用%lf)
- 为什么printf不能用%lf输出double型,而用%f?
- isr不能用printf
- printf()用%f输出double型,scanf用%lf
- c语言的double类型printf %lf 显示0.00000问题
- 不能在printf中使用%lf。为什么printf()用%f 输出double型,而scanf() 却用%lf 呢
- 为什么printf()用%f输出double型,而scanf却用%lf呢?
- 为什么printf()用%f输出double型,而scanf却用%lf呢?
- 为什么printf()用%f输出double型,而scanf却用%lf呢
- 为什么printf()用%f输出double型,而scanf却用%lf
- 为什么printf()用%f输出double型,而scanf却用%lf呢?
- C函数printf中不能使用%lf,而用%f输出double,而函数scanf却必须用%lf来输入double
- char默认为无符号型,BYTE=unsigned char printf double型用%f scanf double型用%lf
- Pie(二分法+double输入用%lf,输出用%f!!!)
- poj2031-Building a Space Station(最小生成树,kruskal,prime)
- 【POJ2031】【最小生成树】【g++ f c++ lf】
- 精确运算不能用float/double,用什么类型?
- poj2031(prim)
- 利用指针实现10个数组元素逆序交换
- 优先队列
- Java多线程
- win7创建用户以及设置为管理员的操作
- ubuntu 开机出现grub rescue修复方法
- poj2031(prime()double printf 不能用%lf)
- ECMAScript5对DOM模型Node的操作
- * Clone Graph
- mysql原生态简单操作数据库
- Java设计模式 单例设计模式
- 有些美好,是属于自己的
- jquery如何判断checkbox(复选框)是否被选中
- 一步一步写正则 1:金额正则表达式
- 数据清洗小记(7):判断是否为日期函数