一个最小 一个最大 poj 1379 hdu 3932
2011-12-08 15:42
309 查看
两个题目一个是求一个点,使得该点到n个点的最大距离的最小值
另一个是求一个点,使得该点到n个点的最小距离的最大值
好像也不是什么模拟退火的做法,只是一种利用随机函数的做法,遍历一下整个区域找到最优解
poj 1379
View Code
hdu 3932
/article/5032218.html
另一个是求一个点,使得该点到n个点的最小距离的最大值
好像也不是什么模拟退火的做法,只是一种利用随机函数的做法,遍历一下整个区域找到最优解
poj 1379
View Code
//在某个区域内到某个点集的最小距离最大 //随机算法解决 //dis[i]表示点i到点集中最小距离的最大值 #include<stdio.h> #include<math.h> #include<stdlib.h> #include<time.h> const double inf = 1e10; const double pi = acos(-1.0); const int Rp = 4;//初始时随机选择一些点,不用太多 const int shift = 100;//但是方向一定要多 struct point { double x,y; void goto_rand_dir(double key) { double d=2*pi*(double)rand()/RAND_MAX; x+=key*sin(d); y+=key*cos(d); } void Get_Rand_Point(int a,int b) { x=rand()%a+1; y=rand()%b+1; } }p[1010],randp[Rp]; double Dis(point a,point b) { return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y); } double dis[Rp]; int main() { int t,i,j,k,x,y,m; scanf("%d",&t); srand(time(NULL)); while(t--) { scanf("%d%d%d",&x,&y,&m); for(i=0;i<m;i++) { scanf("%lf%lf",&p[i].x,&p[i].y); } double tmp; for(i=0;i<Rp;i++) { dis[i]=inf; randp[i].Get_Rand_Point(x,y); for(j=0;j<m;j++) { tmp=Dis(randp[i],p[j]); if(tmp<dis[i]) dis[i]=tmp; } } double key=sqrt(1.0*(x*x+y*y))/2;//初始的步长 while(key>=0.01) { for(i=0;i<Rp;i++) { for(j=0;j<shift;j++) { point cc=randp[i]; cc.goto_rand_dir(key); if(cc.x<0||cc.y<0||cc.x>x||cc.y>y) continue; tmp=inf; for(k=0;k<m;k++) { double di=Dis(cc,p[k]); if(di<tmp) tmp=di; } if(tmp>dis[i]) //如果从i点出发随机移动的点比原来的点更优,则接受该移动 { dis[i]=tmp; randp[i]=cc; } } } key=key*0.7; } for(i=k=0;i<Rp;i++) if(dis[i]>dis[k]) k=i; printf("The safest point is (%.1lf, %.1lf).\n",randp[k].x,randp[k].y); } return 0; }
hdu 3932
/article/5032218.html
相关文章推荐
- 一个最小 一个最大 poj 1379 hdu 3932
- hdu 5289 Assignment(给一个数组,求有多少个区间,满足区间内的最大值和最小值之差小于k)
- hdu 5289 Assignment(给一个数组,求有多少个区间,满足区间内的最大值和最小值之差小于k)
- KM算法 最优匹配(最大权匹配) hdu 2255 奔小康赚大钱 最小权匹配 poj 2195 Going Home
- POJ 1125 Stockbroker Grapevine floyd多源最短路,选取一个点,使最大边的权值是最小的
- (hruscal12.3.3)POJ 3522 Slim Span(求解一个生成树使得该树中的最大边权值和最小边权值之差最小)
- HDU 1713 相遇周期(数学 最大公约数与最小公倍数)
- poj 2516 最小费用最大流
- hdu 6118 度度熊的交易计划 (最小费用最大流
- (二叉搜索树10.1.1)POJ 2309 BST(求以x为根的满二叉搜索树的最小节点编号和最大节点编号)
- poj 3155 Hard Life 【最大密度子图】 【0-1分数规划 + 最小割】
- 求一个数组中的最大值和最小值,要求将比较次数减小至3N/2
- hdu 5428 The Factor 求一个数列的乘积的最小因子的因子数大于2 筛素数
- hdu 3820 Golden Eggs【最大流Dinic-------最小割】好题
- 二分图 最小覆盖数 = 最大匹配数、最大独立集 = 总数-最小覆盖集 证明 hdu 1068
- POJ:3228-Gold Transportation(要求最小生成树最大边最小)
- hdu 1003/poj 1050 连续子序列最大和经典基础dp
- poj 2391 二分 拆点 最大值最小值网络流
- POJ 2135 Farm Tour(最小费用最大流)
- POJ 3084 Panic Room(最大流最小割)