資源簡介
:輸入N個點的坐標,求一個能覆蓋全部點 的最小圓
代碼片段和文件信息
/*輸入n個點的坐標,n<500?求半徑最小的圓能覆蓋這n個點,在圓周上也算覆蓋。
輸出圓心坐標和半徑的100倍的整數部分(不要四拾伍入)?
輸入格式
第一行一個整數n
接著n行,每行一個點的坐標,兩個整數,中間一個空格
重復輸入直至n=0
輸出格式
每行一個結果,最小圓的X坐標的100倍整數部分、Y坐標的100倍整數部分、半徑的100倍整數部分。
每行都有回車,n=0的除外
例子:
輸入:
3
0?0
1?0
1?1
4
5?3
3?3
5?0
0?2
5
0?1
1?0
2?1
3?2
4?1
0
輸出:
50?50?70
270?150?274
200?100?200*/
#include
#include
#include
#define?eps?1e-8
const?int?N=1000;
struct?point?{double?xy;}cenp[N]po;
double?r;
int?nixend[N]yend[N]rend[N]count=0;
double?distance(point?p1point?p2)
{
?return?sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));
}
double?dist2(point?p1point?p2)
{
?return?(p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y);
}
void?calc(double?a1double?b1double?c1double?a2double?b2double?c2)
{
?cen.y=(c1*a2-c2*a1)/(b1*a2-b2*a1);
?cen.x=(c1*b2-c2*b1)/(a1*b2-b1*a2);
}
void
- 上一篇:FastDPM完整代碼
- 下一篇:ad多路采集(ADC.C)
評論
共有 條評論