hdu 3932 最小覆蓋圓 隨機演算法做法

2022-05-24 11:03:09 字數 900 閱讀 7032

找出乙個點使得這個店到n個點的最長距離最短,即求最小覆蓋圓的半徑

用乙個點往各個方向擴充套件,如果結果更優,則繼續以當前步長擴充套件,否則縮小步長

view code

#include

#include

#include

const

double pi = acos(-1.0);

struct point p[1010];

int n;

point mid,tmid;

double r,xmin,ymin,xmax,ymax;

double ans,tans;

double dis(point a, point b)

void solve(double x,double y)

if(maxint main()

mid.x=(xmin+xmax)/2;

mid.y=(ymin+ymax)/2;

tmid=mid;

r=sqrt((xmax-xmin)*(xmax-xmin)+(ymax-ymin)*(ymax-ymin))/2;

for(i=0;idouble tmp=dis(mid,p[i]);

if(tmp>tans)

tans=tmp;

}ans=tans;

while(1)

if(fabs(ans-tans)<0.01&&r<0.0001) break;

if(tanselse r*=0.7;

}printf("

(%.1lf,%.1lf).\n

", mid.x, mid.y);

printf("

%.1lf\n

", sqrt(ans));

}return

0;}

hdu3007 最小覆蓋圓問題

題目 buried memory 最小圓覆蓋,很經典的問題。題目大概是,平面上n個點,求乙個半徑最小的圓,能夠覆蓋所有的點。如果要求乙個最小覆蓋圓,這個圓至少要由三個點確定。有一種演算法就是任意取三個點作圓,然後判斷距離圓心最遠的點是否在圓 內,若在,則完成 若不在則用最遠點更新這個圓。這裡不仔細介...

最小覆蓋圓的增量演算法

題意 給出平面上的一些點,要求用乙個最小的圓,把所有的點包圍起來。最小覆蓋圓,增量法 假設圓o是前i 1個點得最小覆蓋圓,加入第i個點,如果在圓內或邊上則什麼也不做。否,新得到的最小覆蓋圓肯定經過第i個點。然後以第i個點為基礎 半徑為0 重複以上過程依次加入第j個點,若第j個點在圓外,則最小覆蓋圓必...

hdu 2215 最小覆蓋圓 目前WA

思路明顯錯了 最小覆蓋圓必定是某三個頂點的外接圓。先求凸包再列舉。include stdafx.h include math.h include using namespace std define abs n x x 0?x x int n,stack top struct node m stac...