1.问题
求笛卡尔平面中最近点对的欧几里得距离。
2.解析
1.先以5作分割线,得PL{5,6,7,8}和PR{1,2,3,4}
2.重复操作,直到PL或PR的点集大小<=3
3.例如PL{7,8}和PR{5,6},存在最小点距d1,d2,令d1<d2,则dmin=d1
4.易得dmin不一定是最小点距,所以以dmin为划分空间,分割线上的点为基准点,此处为7,筛选出|x-x1|<d的点集R,在R中寻找最近点对的欧几里得距离。由矩阵稀疏性可得,|R|<=6,所以比较次数不会太多(分析处再证,此处先引用)。
5.由此便可得知PL的最小点距,同理PR,并就PL和PR重复步骤4,可得最小点距。
3.设计
struct Point
{
double x, y;
}point[MAXN];//point为点集,x升序排列,x相同时,按y升序排列
double dis(int i, int j) //求欧几里得距离的平方
{
return (point[i].x - point[j].x) * (point[i].x - point[j].x) - (point[i].y - point[j].y) * (point