分治求点集中的最近距离 version 0.1

2024-01-04 20:32

本文主要是介绍分治求点集中的最近距离 version 0.1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

//
//  main.cpp
//  MinPointDistance
//
//  Created by 孙江涛 on 13-9-29.
//  Copyright (c) 2013年 bryan. All rights reserved.
//#include <iostream>
#include <vector>
#include <math.h>using std::cin;
using std::cout;
using std::endl;
using std::vector;
using std::sort;struct Point
{double x;double y;
};struct Result
{Point p1;Point p2;double distance;
};bool sortTwoPointByX(const Point &p1,const Point &p2)
{return p1.x < p2.x;
}bool sortTwoPointByY(const Point &p1,const Point &p2)
{return p1.y < p2.y;
}void sortPointVecByX(vector<Point> &pointVec)
{sort(pointVec.begin(),pointVec.end(),sortTwoPointByX);
}void sortPointVecByY(vector<Point> &pointVec)
{sort(pointVec.begin(),pointVec.end(),sortTwoPointByY);
}void divideVector(vector<Point> &pointVec,vector<Point> &pointVec0,vector<Point> &pointVec1)
{size_t size = pointVec.size();for(vector<Point>::iterator it = pointVec.begin();it < pointVec.begin()+size/2;++it ){Point p;p.x = (*it).x;p.y = (*it).y;pointVec0.push_back(p);}for(vector<Point>::iterator it = pointVec.begin()+size/2;it < pointVec.end();++it ){Point p;p.x = (*it).x;p.y = (*it).y;pointVec1.push_back(p);}}double PointDistance(Point p1,Point p2)
{return sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));
}
double MinPointDistance(double d1,double d2)
{if(d1>=0&&d2>=0){if(d1 - d2 <= 0)return d1;if(d1 - d2 >0)return d2;}if(d1>=0&&d2<0){return d1;}if(d1<0&&d2>=0){return d2;}return 0;
}double MinDistanceInSet(vector<Point> &pointVec)
{size_t size= pointVec.size();if(2 == size){return PointDistance(pointVec[0],pointVec[1]);}else if(3 == size){return MinPointDistance(PointDistance(pointVec[0], pointVec[1]), MinPointDistance(PointDistance(pointVec[1], pointVec[2]), PointDistance(pointVec[0], pointVec[2])));}else if(size>=4){sortPointVecByX(pointVec);vector<Point> pointVec0;vector<Point> pointVec1;divideVector(pointVec, pointVec0, pointVec1);double minDistanceInTwoPart = MinPointDistance(MinDistanceInSet(pointVec0),MinDistanceInSet(pointVec1));Point middlePoint = pointVec[size/2];vector<Point> pointVec2;for (vector<Point>::iterator it = pointVec.begin(); it<pointVec.end(); ++it){Point p;p.x = (*it).x;p.y = (*it).y;if(fabs(p.x-middlePoint.x) < minDistanceInTwoPart && p.x!= middlePoint.x){pointVec2.push_back(p);}}sortPointVecByY(pointVec2);double minDistance = MinPointDistance(MinDistanceInSet(pointVec2), minDistanceInTwoPart);return minDistance;}return -1;
}int main(int argc, const char * argv[])
{vector <Point> pointVec;vector <Point> pointVec0;vector <Point> pointVec1;Point p;while(cin>>p.x>>p.y){pointVec.push_back(p);}cout<<MinDistanceInSet(pointVec)<<endl;return 0;
}


这篇关于分治求点集中的最近距离 version 0.1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/570499

相关文章

提示:Decompiled.class file,bytecode version如何解决

《提示:Decompiled.classfile,bytecodeversion如何解决》在处理Decompiled.classfile和bytecodeversion问题时,通过修改Maven配... 目录问题原因总结问题1、提示:Decompiled .class file,China编程 bytecode

poj1330(LCA最近公共祖先)

题意:求最近公共祖先 思路:之前学习了树链剖分,然后我就用树链剖分的一小部分知识就可以解这个题目了,记录每个结点的fa和depth。然后查找时,每次将depth大的结点往上走直到x = y。 代码如下: #include<iostream>#include<algorithm>#include<stdio.h>#include<math.h>#include<cstring>

Codeforces Round #240 (Div. 2) E分治算法探究1

Codeforces Round #240 (Div. 2) E  http://codeforces.com/contest/415/problem/E 2^n个数,每次操作将其分成2^q份,对于每一份内部的数进行翻转(逆序),每次操作完后输出操作后新序列的逆序对数。 图一:  划分子问题。 图二: 分而治之,=>  合并 。 图三: 回溯:

Maven创建项目中的groupId, artifactId, 和 version的意思

文章目录 groupIdartifactIdversionname groupId 定义:groupId 是 Maven 项目坐标的第一个部分,它通常表示项目的组织或公司的域名反转写法。例如,如果你为公司 example.com 开发软件,groupId 可能是 com.example。作用:groupId 被用来组织和分组相关的 Maven artifacts,这样可以避免

最近心情有点复杂:论心态

一月一次的彷徨又占据了整个身心;彷徨源至不自信;而不自信则是感觉自己的价值没有很好的实现亦或者说是自己不认可自己的目前的生活和状态吧。 我始终相信一句话:任何人的生活形态完全是由自己决定的;外在的总归不能直达一个人的内心深处。所以少年 为了自己想要的生活 多坚持努力吧、不为别人只为自己心中的那一丝执着。 由此我看到了一个故事: 一个心情烦躁的人去拜访禅师。他问禅师:我这辈子就这么注定了吗?您

Jenkins 通过 Version Number Plugin 自动生成和管理构建的版本号

步骤 1:安装 Version Number Plugin 登录 Jenkins 的管理界面。进入 “Manage Jenkins” -> “Manage Plugins”。在 “Available” 选项卡中搜索 “Version Number Plugin”。选中并安装插件,完成后可能需要重启 Jenkins。 步骤 2:配置版本号生成 打开项目配置页面。在下方找到 “Build Env

线性代数|机器学习-P35距离矩阵和普鲁克问题

文章目录 1. 距离矩阵2. 正交普鲁克问题3. 实例说明 1. 距离矩阵 假设有三个点 x 1 , x 2 , x 3 x_1,x_2,x_3 x1​,x2​,x3​,三个点距离如下: ∣ ∣ x 1 − x 2 ∣ ∣ 2 = 1 , ∣ ∣ x 2 − x 3 ∣ ∣ 2 = 1 , ∣ ∣ x 1 − x 3 ∣ ∣ 2 = 6 \begin{equation} ||x

Learn ComputeShader 09 Night version lenses

这次将要制作一个类似夜视仪的效果 第一步就是要降低图像的分辨率, 这只需要将id.xy除上一个数字然后再乘上这个数字 可以根据下图理解,很明显通过这个操作在多个像素显示了相同的颜色,并且很多像素颜色被丢失了,自然就会有降低分辨率的效果 效果: 但是这样图像太锐利了,我们加入噪声去解决这个问题 [numthreads(8, 8, 1)]void CSMain(uint3 id

在二叉树中找到两个节点的最近公共祖先(基于Java)

如题  题解 public int lowestCommonAncestor(TreeNode root, int o1, int o2) {//记录遍历到的每个节点的父节点。Map<Integer, Integer> parent = new HashMap<>();Queue<TreeNode> queue = new LinkedList<>();parent.put(roo