平面二維點對最短距離求解問題

2021-09-13 21:47:21 字數 1414 閱讀 9705

二維點對,先隨機生成平面點,再把平面上的點劃分成左右兩部分,我覺得其實無所謂左右點的多少,對結果沒有影響,記錄最短距離的點,比較中線附近的點的距離。

#include #include #include #include using namespace std;

const double inf = 1e20;//相當於正無窮

const int n =10000;

struct point

point[n];

int tmpt[n];

void setpoints(point point, int num);

float dis(int a, int b);

void paixu1(point l, int num);

double min(double a, double b);

double closest_pair(int left, int right, point &p, point &q);

int main()

void setpoints(point point, int num)

for (int i = 0; i < num; i++) }

//求兩點的距離的平方

float dis(int a, int b)

void paixu1(point l, int num)

} } cout << endl;

for (int i = 0; i < num; i++)

if (left + 1 == right)

return dis(left, right);

int mid = (left + right) /2;

double d1 = closest_pair(left, mid,p,q);//隨著呼叫mid,left right 都在改變

point d1p = p;

point d1q = q;//儲存左支最近兩個點的點資料

double d2 = closest_pair(mid + 1, right,p,q);//得到右支的最短距離點資料

d = min(d1, d2);

if (d1 < d2)

else

int i, j, k = 0;

//分離出寬度為d的區間

for (i = left; i <= right; i++)

sort(tmpt, tmpt + k, cmpy);//排序函式,(首位址,尾位址,排序方式)

for (i = 0; i < k; i++)

}}return d;

}

希望我的**對你的學習有幫助

二維平面最短距離(分治)

題目描述 有一天,小明得到了二維平面上的若干個點,他現在想知道這些點中距離最近的兩個點之間的距離是多少?輸入 第一行輸入乙個整數t,共有t組測試資料 t 30 每組輸入資料第一行輸入乙個n,表示有n個點。第二行有n 2的數字,相鄰兩個數代表乙個點的x,y座標。1輸出輸出有t行,每行包括乙個整數,代表...

28 幾何演算法 點集中最短距離點對的距離

求取輸入點集最近點對的距離 相比於對所有點對窮舉,並得出結果的方式相比,本演算法時間複雜度為 nlg n 優於窮舉下的 n 2 extern c class algorithmlib mindistance class flagpoint mindistance mindistance double...

二維幾何 平面最近點對

存個模板 是用分治寫的時間複雜度 nlogn 但是本題好像還有一種玄學做題法 我們充分發揚人類智慧型 將所有點全部繞原點旋轉同乙個角度,然後按x座標排序 根據數學直覺,在隨機旋轉後,答案中的兩個點在陣列中肯定不會離得太遠 所以我們只取每個點向後的5個點來計算答案 這樣速度快得飛起,在n 100000...