最近點對一般想到列舉 ,一一枚舉時間複雜度為n^2;列舉時候一些操作是多餘的,有了分治演算法的思想 ,把一些問題分個擊破,再回到整體。
題目鏈結
以這道題為例,我們可以把他按照x軸的公升序分成多個子區域先在子區域中求最近點距離,然後將相鄰兩個子區域合併,看看兩個子區域中有沒有更小的。大致思想就是這樣的。
設計演算法:遞迴將問題分成一小個問題。在找區域裡面的最近點先將他按照x或y軸公升或者降序排序這樣找就可以省時間,詳見**,先看題,再看**。
有錯的地方還望指出,多多來hack
#include #include #include #include #include #include #include using namespace std;
const int mm = 100005;
const double inf=1e20;
struct points
;points point[mm];
bool cmpx(points x,points y)
}return d;
}int main()
{ while(scanf("%d",&n)!=eof&&n)
{int i;
for(i=0; i
hdu 1007 二維最近點問題 分治法
最近點對可能出現的三個區域 sl sr l兩側 l d l d 其中d為sl sr 中的最近點距離 以下 參照 1 include2 include3 include4 include5 using namespace std 67 const int n 100005 8 9 typedef st...
hdu1007 最近點對
題意 給你n個點,讓你求最近的兩個點的距離是多少.思路 這個題目我沒思路,我在網上看的是什麼分治 鴿巢原理,分治我知道,鴿巢原理我也知道,但是這個題目就是沒有證明出來他和鴿巢原理有jm關係,總之就是先以x或者y優先sort一下,然後每次列舉每個相鄰點的附近5個就行了 加自己一共六個 而且這個題目的前...
HDU 1007 最近點對
分治法求最近點對 遞迴將點不斷分成小組,計算最短距離。此時的最短距離僅僅是兩點都屬兩塊的某一塊 這裡的分割點是mid點 還需要考慮兩點分屬兩塊的情況。這時對於選點則把範圍縮小到了以mid為中心。再將距離mid點x軸2 mindist範圍點考慮在內。在這些點中,再取mid點,留下那些 y的距離不大於m...