問題描述:
在二維平面上的n個點中,找出最近的一對點,就是最近點對問題。
**如下:
#include #include #include using namespace std;
/*--------------頂點座標*/
typedef struct point;
/*--------------操作頂點座標*/
typedef struct tpoint;
double d = 10e6; //----初始化距離
/*--------------按x排序*/
int cmpx(point a , point b)
/*-------------按y排序*/
int cmpy(tpoint a , tpoint b)
/*-----------計算兩個頂點的距離*/
double distance(double ax , double ay , double bx , double by)
/*-----------求解最短距離的工作過程函式*/
void closest(point x , tpoint *y , int l , int r)
if(r-l == 2)
/*----------多於3個頂點*/
tpoint *sl = new tpoint[(r-l)/2+6];
tpoint *sr = new tpoint[(r-l)/2+6];
int m = (r-l)/2+l;//------------從中間分開
int j = 0 , k = 0;
for(int i = 0 ; i <= r-l ; i++)
closest(x , sl , l , m);//遞迴求解左邊
closest(x , sr , m+1 , r);//遞迴求解右邊
point *z = new point[r-l+6];
k = 0;
/*-------------找出 距離 m < d 的說有頂點*/
for(int i = 0 ; i <= r-l ; i++)
}/*-----------------頂點最短距離位於左右兩邊*/
for(int i = 0 ; i < k ; i++)
}delete sl;
delete sr;
delete z;
}/*-------初始化函式*/
bool cpair(point x , int n)
sort(y , y+n , cmpy);//---按 y排序
closest(x , y , 0 , n-1);
delete y;
return true;
}/*--------main()*/
int main()
{ int n;
cout
point x[n];
cout>x[i].y;
cpair(x , n);
cout<
分治 最近點對問題
利用分治方法的經典問題 最近點對問題 closest pair of points problem 問題描述 n個點在公共空間中,求出所有點對的歐幾里得距離最小的點對。問題分析 該題直觀的解決方法便是brute force 暴力求解 利用分治思想進行求解。首先分析題目,符合分治法的適用條件,規模越小...
分治 最近點對問題
最近點對問題 在平面內有點集 s s 包含 n 個點。已知每個點的座標 x,y 求最近的兩點之間的距離 n 2 如果存在重合的兩個點,最近距離記為0。列舉的方法時間複雜度是o n 2 通過分治可以將時間複雜度降為o nlog n 利用一條直線將平面上的所有點集 s 分成兩部分s1 s2,分別計算這兩...
平面最近點對問題 分治
在與聯盟的戰鬥中屢戰屢敗後,帝國撤退到了最後乙個據點。依靠其強大的防禦系統,帝國擊退了聯盟的六波猛烈進攻。經過幾天的苦思冥想,聯盟將軍亞瑟終於注意到帝國防禦系統唯一的弱點就是能源 該系統由n個核電站 能源,其中任何乙個被摧毀都會使防禦系統失效。將軍派出了n個 進入據點之中,打算對能源站展開一次突襲。...