給出平面上的一些點,求覆蓋這些點的最小圓。
具體問題可以見hdu 2215。
具體解法是,先求凸包,然後列舉凸包上任意3個點,若列舉的三個點構成鈍角三角形,則最大半徑為最長邊的一半
否則,半徑r=a*b*c/(4*s)其中s是面積,具體面積可以用叉乘求得,s=(向量a叉乘向量b)的絕對值的一半。
view code
1 #include2 #include3 #include4 #include5
using
namespace
std;67
struct
node8;
1213 node point[110
];14
intn;
1516
double
dist(node a,node b)
1720
21double
mul(node p,node a,node b)
2225
26int
cmp(node a,node b)
2735
36int stack[110
],top;
3738
void
tubao()
3949}50
51double max(double a,double
b)52
5556
intmain()
5770
/*********************************
*///
凸包71 k=0;72
for(i=1;i)
7379 swap(point[0
],point[k]);
80 sort(point+1,point+n,cmp);
81tubao();
82/*
********************************
*/83
double ans=0
,temp,ares;
84if(top<3)85
90for(i=0;i)
91106
else
if(b==d)
107111
if(a*a+b*b//
鈍角三角形
112115
else
116119 ans=max(ans,temp);
120}
121}
122}
123 printf("
%.2lf\n
",ans+0.5
);124
}125
return0;
126 }
最小覆蓋圓
最小覆蓋圓解決的問題模板大概是 在乙個平面內的很多點中,找出乙個最小的圓,使之覆蓋所有的點。假設點的個數為 n nn,最小覆蓋圓面積為 rrr。當 n 1 n 1 n 1 時,毋庸置疑,此時 r 0 r 0 r 0 當 n 2 n 2 n 2 時,此時r應該為 r d is p oint 1,po ...
hdu3007 最小覆蓋圓問題
題目 buried memory 最小圓覆蓋,很經典的問題。題目大概是,平面上n個點,求乙個半徑最小的圓,能夠覆蓋所有的點。如果要求乙個最小覆蓋圓,這個圓至少要由三個點確定。有一種演算法就是任意取三個點作圓,然後判斷距離圓心最遠的點是否在圓 內,若在,則完成 若不在則用最遠點更新這個圓。這裡不仔細介...
FJOI2015 最小覆蓋雙圓問題
給定平面上n個點 x 1,y 1 x n,y n x1 y1 xn yn 找出2個半徑相同的圓r 1r1 和r 2r2 覆蓋給定的n個點,且半徑最小。設計乙個演算法,計算出所求最小覆蓋雙圓 r 1r1 和 r 2r2 的半徑。輸入有多個測試例項。每個例項的第1行中給出正整數n,n 1000,表示平面...