HDOJ1007,求平面上一组坐标点中距离最近的两点间距离。参考此链接介绍的方法
HDU1007查找平面最近点对 。具体实现看代码及注解。
#include <iostream>
#include <cmath>
#include <algorithm>
#include <iomanip>
using namespace std;
// 坐标点
struct coordinate {
double x;
double y;
};
coordinate array[100005]; // 坐标数组
int tmp[100005];
// 计算两点间距离
inline double dist(coordinate a, coordinate b)
{
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
// 求最小值
double min(double a, double b)
{
return a < b ? a : b;
}
// 为sort函数提供排序依据,按x轴排序
bool cmpx(coordinate a, coordinate b)
{
return a.x < b.x;
}
// 为sort函数提供排序依据,按y轴排序
double cmpy(int a, int b)
{
return array[a].y < array[b].y;
}
// 核心算法,递归地求解最距离坐标点对
// 参数 l r :沿x轴从小到大排序后,区域内左边和最右边的数组下标
double find(int l , int r)
{
// 递归算法
if (r == l+1)
return dist(array[l]