POJ 1379(模擬退火)

2022-05-24 15:21:08 字數 1453 閱讀 1914

2015-04-17 23:45:14

題意:給出乙個框內的n個點(地雷),讓你求出乙個到所有點距離最小值最大的位置。

隨即1k個點來找,步長為max(x,y),縮小係數為0.5 .. (事實上這些值都沒有硬性要求)

然後就是直接上模擬退火,注意步長最小值要設為乙個比較小的數已保證精度(比如10^-3)

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 

8 #include 9 #include 10 #include 11 #include 12 #include

13 #include 14 #include 15

using

namespace

std;

1617

#define mem(a,b) memset(a,b,sizeof(a))

18#define rep(i,n) for(int i=0;i<(n);++i)

19#define for(i,a,b) for(int i=(a);i<=(b);++i)

20#define getmid(l,r) ((l) + ((r) - (l)) / 2)

21#define mp(a,b) make_pair(a,b)

2223 typedef long

long

ll;24 typedef pairpii;

25const

int inf = (1

<< 30) - 1;26

const

int maxn = 1010;27

const

double cof = 0.5;28

const

double eps = 1e-3;29

const

double deta = 0.7;30

31int

t,n,m,k;

32double

x[maxn],y[maxn];

33int dir[4][2] = ,,,};

3435

double dis(double a1,double b1,double a2,double

b2)38

39double cal(double a,double

b)44

45int

main()72}

73if(mov == false) break;74

}75 step *=cof;76}

77if(ans == -1 || res >ans)82}

83 printf("

the safest point is (%.1f, %.1f).\n

",ansx,ansy);84}

85return0;

86 }

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 模擬退火

模擬退火演算法,很久之前就寫過一篇文章了。雙倍經驗題 poj 2420 題意 在乙個矩形區域內,求乙個點的距離到所有點的距離最短的那個,最大。這個題意,很像二分定義,但是毫無思路,也不能暴力列舉,那就模擬退火。參考著名的acdream,哈哈,有個共同點,那就是,大部分的 都沒有做接受準則,這也許是a...