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 #include8 #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...