AOJ 862 平面上最近点对

该博客介绍了如何应用分治思想解决平面上最近点对的问题,详细阐述了算法的核心步骤,包括根据点的x、y值排序,通过在x轴上划垂线划分点集,并递归计算左右两部分的最短距离。当最近点对横跨中心线时,通过构建矩形并遍历其中的点,与后续7个点计算距离以找到最近点对。这种方法基于假设,确保在限定区域内最多有8个点,从而减少比较次数。
摘要由CSDN通过智能技术生成

平面上最近点对

http://ccpc.ahu.edu.cn:8080/OJ/Problem.aspx?id=862

分治思想, 核心是分治算法

  1. 分别根据点的 x,y 值进行排序

  2. 在 x 轴上划一道垂线, 将点均分成两半

  3. 假设最近点对都在左/右部分, 递归计算左/右半部分的最短距离
    并返回较小值 dis

  4. 假设最近点对分别在左右两个部分, 横跨中心的竖线. 中心线为中心,
    2*dis 为宽度画一个矩形, 横跨中心线的最近点对 candidate 都在这个矩形内.
    将这些点按照 y 值的大小加入到数组中. 遍历数组中的点, 将该点与其后的
    7 个点计算距离, 返回最小距离

  5. 为什么仅和 7 个点作对比呢. 因为已经假设 dis 是左右不分最近点对的最小值,
    这就说明在一个长(宽)为 dis 的正方形内, 至多有 4 个点. 长为 dis*2,
    宽为 dis 的长方形至多 8 个.

#include <cstdio>
#include <iostream>
#include <cstring>
#include<cmath>
#include &l
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值