模擬退火求n個點到某點距離和最短

2021-07-02 06:43:15 字數 850 閱讀 6060

/*

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

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

*/#include#include#includeconst 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(maxxmax) xmax=p[i].x;

if(p[i].y>ymax) ymax=p[i].y;

}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;itans)

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;

}

乙個退火演算法求點到所有點的距離之和最小

題意 給定n個點,在範圍內找到x軸上的乙個點,使得n個點到這個點的距離之和最小 模擬退火法 模擬退火的過程 1 找到這些點所在的範圍,用兩個點框定 2 在這個範圍內生成num個點 num自定 3 對於每個生成的點i,在其周圍生成num個點,一旦有點優於i,則替換。4 縮小範圍d,若d 精度,退出,否...

使用Java求某點到直線上的投影點

求直線外一點到直線上的投影點 param pline 線上一點 param k 斜率 param pout 線外一點 param pproject 投影點 public static void getprojectivepoint pointf pline,double k,pointf pout,...

N個點求最大斜率

面試題 平面上n個點,每兩個點都確定一條直線,求出斜率最大的那條直線所通過的兩個點 斜率不存在的情況不考慮 時間效率越高越好。分析 3個點a,b,c,把它們的按x座標排序。假設排序後的順序是abc,那麼有兩種情況 1.abc共線,則k ab k bc k ac 2.abc不共線,則abc將形成乙個三...