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

题目描述

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

输入格式

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

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

输出格式

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

样例

样例输入 #1

3
1 1
1 2
2 2

样例输出 #1

1.0000
数据范围与提示

对于 100% 的数据,保证0

代码:

#include
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>1;
		double ans1=f(L,mid);
		double ans2=f(mid+1,R);
//		cout<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>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<

你可能感兴趣的:(c++,平面,算法)