POJ 最小球覆蓋 模擬退火

2022-04-01 06:39:31 字數 995 閱讀 2579

最小球覆蓋:用半徑最小的球去覆蓋所有點。

純粹的退火演算法,是搞不定的,精度不夠,不然就會tle,根本跑不出答案來。

任取一點為球心,然後一點點靠近最遠點。其實這才是最主要的。

因為:4個點確定乙個球,也就是說,這個球,會慢慢穩定,每次用乙個點到最遠的點的距離去靠近,怎麼靠近,玄學距離 ​。

再在這個基礎上乘以 t ,模擬退火溫度。這樣靠近速度增加。並且不用判斷是否較以前是否更優才轉移,因為他是必須轉移過去。至少你不可能是最長邊的端點的,而且他會隨著溫度逐漸穩定。

#include #include 

#include

​using

namespace

std;

​const

int maxn = 35;​

struct

node nodes[maxn];

​intn;​

double

dist(node a,node b)

​double

calc(node z)

​int dx[6] = ;

int dy[6] = ;

int dz[6] = ;

​int

main()

}​ node z;

z.x = s.x + (nodes[k].x-s.x)/d*t;

z.y = s.y + (nodes[k].y-s.y)/d*t;

z.z = s.z + (nodes[k].z-s.z)/d*t;

​ ans =min(ans,d);

s =z;

t = t*0.98

; }

​ printf(

"%.5f\n

",ans);

​ }

return0;

}

HDU3007 求解最小圓覆蓋 模擬退火?

這次先上 再證明 的可行性,感覺有點不像模擬退火,因為這個 借用的實際上是乙個完全單調的函式 只有乙個極值點,就是說只有乙個低谷,那個點實際上就是答案,就是全域性最優 就不自己寫 了,獻上網上找到的一段 這段 的思路其實就是先找乙個點作為起始點p,然後不斷找到和該點距離最遠的點a,然後將p向a慢慢挪...

poj1379 模擬退火

poj 1379 題意 給定n個點,你需要在給定矩形範圍內找到乙個點,使得它到這n個點的距離的最小值最大。一開始是用的顧研的方法,但總是ac不了,聽盾哥說他那個有問題。正確的演算法流程應該是 初始化 初始溫度de 充分大 初始p個並行解狀態s 演算法迭代的起點 失敗次數上限l,接受引數x,衰變係數k...

poj 1379 模擬退火

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