二维空间最近点对(分治)
来源:互联网 发布:制作招聘广告app软件 编辑:程序博客网 时间:2024/05/16 05:44
分治求解,二维空间最近点对。
#include<algorithm>#include<iostream>#include<cstdio>#include<cmath>using namespace std;typedef long long LL;const int maxn=100005;struct Point{ int x , y;};Point p[maxn];inline LL Distance(Point a,Point b){ int dx = a.x - b.x , dy = a.y - b.y; return (LL) dx * dx + (LL)dy * dy;}bool cmpx(Point a,Point b){ return a.x < b.x;}bool cmpy(int a,int b){ return p[a].y < p[b].y;}int ypos[maxn];///Call closedis(p, 1, n);LL closedis(Point *p, int l, int r){ if(l == r)return 1LL << 62; if(l+1 == r) return Distance(p[l], p[r]); int mid=(l+r)/2; LL ans = min(closedis(p, l, mid), closedis(p, mid+1, r)); int num = 0; for(int i = l; i <= r; i++) { if((LL)(p[i].x - p[mid].x) * (p[i].x - p[mid].x) <= ans) ypos[num++]=i; } sort(ypos, ypos + num, cmpy); for(int i = 0; i < num; i++) {// int k=0; for(int j = i + 1; j < num; j++) { if((LL)(p[ypos[i]].y-p[ypos[j]].y)*(p[ypos[i]].y-p[ypos[j]].y)>=ans)break; else { ans=min(ans, Distance(p[ypos[i]], p[ypos[j]]));// k++; }// if(k>6)break; ///不知优化?正确定待证。。 } } return ans;}
0 0
- 二维空间最近点对(分治)
- HDU1007——二维空间最近点对问题(分治)
- 最近点对 (分治)
- 最近点对(分治)
- HDU 1007 二维最近点对问题 / 分治
- hdu--1007(分治求二维最近点对)
- 最近点对(分治法)
- uva 10245 最近点对(分治)
- 最近点对问题(分治)
- hdoj_1007Quoit Design_最近点对(分治)
- 最近点对问题(分治)
- hdu1007最近点对(分治)
- hdu1007.最近点对(分治法)
- 最近二维点对
- hdu 1007 (空间最近点对)
- [算法实现]基于分治的二维平面最近点对算法实现
- HDU 5721 Palace(平面最近点对(分治))
- hdu 1007 经典最近点对 (分治法求解)
- RBAC新解:基于资源的权限管理(Resource-Based Access Control)
- Android NDK 调用C
- 读取excel
- 谷歌Chrome浏览器下document.documentElement.scrollTop取值异常的解决方法
- Android-搜索关键字飞入飞出动画
- 二维空间最近点对(分治)
- ubuntu安装pycharm
- Java web过滤器验证登录(避免未经登录进入主页)
- C++ GUI QT 第4版 之线程(二) 线程的同步(4)
- How To Find Location Of Install, Autoconfig, Patching , Clone And Other Logs?
- Java NIO系列教程(一) Java NIO 概述
- Tomcat中部署WEB项目的四种方法
- OpenCV2马拉松第17圈——边缘检测(Canny边缘检测)
- VXworks 启动