模擬退火演算法,很久之前就寫過一篇文章了。雙倍經驗題(poj 2420)
題意:在乙個矩形區域內,求乙個點的距離到所有點的距離最短的那個,最大。
這個題意,很像二分定義,但是毫無思路,也不能暴力列舉,那就模擬退火。
參考著名的acdream,哈哈,有個共同點,那就是,大部分的**,都沒有做接受準則,這也許是acmer對智慧型演算法的不習慣吧~~~
#include #include#include
using
namespace
std;
const
int maxn = 1005
;int
x,y,m;
intkase;
struct
node nodes[maxn];
int dx[4] = ;
int dy[4] = ;
double
dist(node a,node b)
double
calc(node p)
intmain()
tmp.x = 0
; tmp.y =y;
anstmp =calc(tmp);
if(anstmp>ans)
tmp.x =x;
tmp.y = 0
; anstmp =calc(tmp);
if(anstmp>ans)
tmp.x =x;
tmp.y =y;
anstmp =calc(tmp);
if(anstmp>ans)
while(t>1e-8
) }
}t = t*0.98
; }
printf(
"the safest point is (%.1f, %.1f).\n
",ansx,ansy);
}return0;
}
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,若...
POJ 1379(模擬退火)
2015 04 17 23 45 14 題意 給出乙個框內的n個點 地雷 讓你求出乙個到所有點距離最小值最大的位置。隨即1k個點來找,步長為max x,y 縮小係數為0.5 事實上這些值都沒有硬性要求 然後就是直接上模擬退火,注意步長最小值要設為乙個比較小的數已保證精度 比如10 3 1 inclu...