最小圓覆蓋模板類

2021-10-22 00:00:20 字數 968 閱讀 1783

演算法:隨機增量法、最小圓覆蓋、單點確定乙個最小圓

隨機增量法簡介:略,見:oi-wiki

最小圓覆蓋:在平面上有n個點,求乙個半徑最小的圓,能覆蓋所有的點。

演算法:

假設圓o是前i-1個點的最小覆蓋圓,那麼在加入乙個點i,如果在圓上或圓內不考慮,否則新得到的最小覆蓋圓一定經過第i個點。

以p[1]為基礎一直加j點。

因為三點確定乙個圓,所以迴圈三次。

時間複雜度:o(n)

解決問題:洛谷1742:最小圓覆蓋

模板:

#include #define ll long long

using namespace std;

const ll maxn = 1e5 + 10;

const double eps = 1e-8;

struct mincircle p[maxn], st[maxn], o;

double sqr(double x)

double dis(point a, point b)

bool cmp(double a, double b)

//讀入

void read()

//三點確定乙個圓。也可以當作是乙個模板

point geto(point a, point b, point c) else if (cmp(b1, 0)) else

return ans;

}void mainwork(ll il, ll ir) }}

}//列印都給放進來,當然,可以按需要自己列印。不呼叫他就ok了

void print()

} m;

int main()

最小圓覆蓋 模板題

include const int maxn 1005 struct tpoint struct tcircle struct t tcircle c tpoint a maxn double distance tpoint p1,tpoint p2 double area t t tcircle ...

最小圓覆蓋

最小圓覆蓋。神奇的隨機演算法。當點以隨機的順序加入時期望複雜度是線性的。algorithm a 令ci表示為前i個點的最小覆蓋圓。當加入新點pi時如果pi不在ci 1裡那麼pi必定在ci的邊界上。b 再從新考慮這樣乙個問題,ci為前i個點最小覆蓋圓且p在ci的的邊界上!同理加入新點pi時如果p i不...

最小圓覆蓋

最小圓覆蓋問題 在乙個平面上,給出 n 個點,求包圍這些點的最小圓,輸出圓心及半徑。分析雖然可以用模擬退火或者三分套三分,這裡只講隨機增量法,隨機增量法是一種確定性演算法,隨機意義下均攤複雜度 o n 而且可以達到很高的精度 可達到 10 10 量級 有事實 如果點 p 不在集合 s 的最小圓覆蓋內...