当前位置: 首页 > news >正文

C++编程题目------平面上的最接近点对(分治算法)

题目描述

给定平面上n个点,找出其中的一对点的距离,使得在这n个点的所有点对中,该距离为所有点对中最小的。

输入格式

第一行一个整数 n,表示点的个数。

接下来 n 行,每行两个实数 x,y ,表示一个点的行坐标和列坐标。

输出格式

仅一行,一个实数,表示最短距离,四舍五入保留 4 位小数。

样例

样例输入 #1

3
1 1
1 2
2 2

样例输出 #1

1.0000
数据范围与提示

对于 100% 的数据,保证0<n<=10000 ,0<=x,y<=1000000000,小数点后的数字个数不超过6 。

代码:

#include<bits/stdc++.h>
using namespace std;
int n;
struct point{double x,y;
};
point a[10010],tmp[10010];
double ans;
bool cmpx(const point &A,const point &B){if(A.x==B.x)return A.y<B.y;elsereturn A.x<B.x;
}
bool cmpy(const point &A,const point &B){if(A.y==B.y)return A.x<B.x;elsereturn A.y<B.y;
}
double dist(point A,point B){return sqrt((A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y));
}
double f(int L,int R){double ans=2<<18;if(L==R)return ans;else if(L+1==R){return dist(a[L],a[R]);}else{int mid=(L+R)>>1;double ans1=f(L,mid);double ans2=f(mid+1,R);
//		cout<<ans1<<" "<<ans2<<endl; ans=min(ans1,ans2);
//		ans=ans1;
//		if(ans>ans2)
//			ans=ans2;int cnt=0;for(int i=L;i<=R;i++)if (fabs(a[i].x-a[mid].x)<=ans)tmp[++cnt]=a[i];sort(tmp+1,tmp+cnt+1,cmpy);for(int i=1;i<cnt;i++)for(int j=i+1;j<=cnt;j++)if(tmp[j].y-tmp[i].y<=ans)ans=min(ans,dist(tmp[i],tmp[j]));return ans;}
}
int main() {cin>>n;for(int i=1;i<=n;i++)cin>>a[i].x>>a[i].y;sort(a+1,a+n+1,cmpx);//for(int i=1;i<=n;i++)//cout<<a[i].x<<" "<<a[i].y<<endl;ans=f(1,n);cout<<fixed<<setprecision(4)<<ans<<endl;//print("%.4lf\n",ans);return 0;
}

http://www.lryc.cn/news/209243.html

相关文章:

  • Linux下的文件操作和文件管理
  • 设计模式之桥梁模式
  • “从部署到优化,打造高效会议管理系统“
  • Facebook广告效果数据获取
  • nlp之文本转向量
  • 【luckfox】添加压力传感器hx711
  • C++11的lambda表达式
  • 矩阵特征值与特征向量的理解
  • 云原生安全:如何保护云上应用不受攻击
  • 如何在用pip配置文件设置HTTP爬虫IP
  • 2023MathorCup高校数模挑战赛B题完整解题代码教程
  • 《动手学深度学习 Pytorch版》 10.7 Transformer
  • ORACLE-递归查询、树操作
  • MySQL篇---第四篇
  • em/px/rem/vh/vw单位的区别
  • 【C++】多态 ③ ( “ 多态 “ 实现需要满足的三个条件 | “ 多态 “ 的应用场景 | “ 多态 “ 的思想 | “ 多态 “ 代码示例 )
  • 创建一个Keil项目
  • Xray的简单使用
  • Linux Ubunto Nginx安装
  • 深度学习中的epoch, batch 和 iteration
  • unity开发安卓视频文件适配手机和平板
  • NLP之RNN的原理讲解(python示例)
  • yo!这里是进程间通信
  • 使用docker安装MySQL,Redis,Nacos,Consul教程
  • python和Springboot如何交互?
  • Qt实现json解析
  • Ajax、Json深入浅出,及原生Ajax及简化版Ajax
  • 前端第一阶段测试
  • openlayers+vue的bug
  • 实时数仓-Hologres介绍与架构