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

2021-06-21 14:49:00 字數 776 閱讀 2545

題意:給定n個點,在範圍內找到x軸上的乙個點,使得n個點到這個點的距離之和最小

模擬退火法

模擬退火的過程

1 找到這些點所在的範圍,用兩個點框定

2 在這個範圍內生成num個點(num自定)

3 對於每個生成的點i,在其周圍生成num個點,一旦有點優於i,則替換。

4 縮小範圍d,若d《精度,退出,否則執行 3

5 遍歷所有num個點,找到val的最小值

#include #include #include #include #include #include #include #include #include#includeusing namespace std;

const int num=100;

const int rad=1000;

struct point

point(double _x,double _y):x(_x),y(_y){}

}p[100001],may[num];

double rand()//隨機產生0-1的浮點數

int n;

double mini , maxi ;

double dis(point a,point b)

double judge(point t)//評價函式,得到點t的評價值val

double val = maxi-mini ;

solve(val);

}int cc ;

cin>>cc ;

}

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

找出乙個點使得這個店到n個點的最長距離最短,即求最小覆蓋圓的半徑 用乙個點往各個方向擴充套件,如果結果更優,則繼續以當前步長擴充套件,否則縮小步長 include include includeconst double pi acos 1.0 struct point p 1010 int n po...

P1395 會議(樹上找一點到所有點距離和最小)

題意 一顆n個點的樹,n 1條邊,每條邊的權值為1,找到乙個點,使得所有點到這個點的距離之和最小。思路 我們假設點1為根時,總花費為f 1 假設點2是點1的子節點,那麼f 2 f 1 點2的子節點個數 n 點2的子節點個數 因為我們把根從1換到2的時候,2的子樹中節點貢獻全部 1,其他節點貢獻全部 ...

求乙個集合所有可能的子集

增量構造法 一次選出乙個元素放到集合中 include includeusing namespace std const int max 100 int layer 1 遞迴層數 int count1 0 void print subset int n,int a,vector vi,int cur...