poj 2420 A Star not a Tree?
2012-03-26 21:58
453 查看
题目链接:http://poj.org/problem?id=2420
题目大意:求一个点到给出的n个点的距离和最小。
分析:随机化算法。其实本题的正解应该是模拟退火,可是本菜现在还不会...所以写了一个纯乱随机的,
额,其实也不是纯随机,先在数据范围内随机20个点Pi,然后定一个距离s,判断每一个Pi的周围距离s的四个点是否比pi优,是则更新Pi,缩小s。让它搞个1000次取个最小就好了。其实六七百次之后20个点基本就不动了。
代码:
View Code
题目大意:求一个点到给出的n个点的距离和最小。
分析:随机化算法。其实本题的正解应该是模拟退火,可是本菜现在还不会...所以写了一个纯乱随机的,
额,其实也不是纯随机,先在数据范围内随机20个点Pi,然后定一个距离s,判断每一个Pi的周围距离s的四个点是否比pi优,是则更新Pi,缩小s。让它搞个1000次取个最小就好了。其实六七百次之后20个点基本就不动了。
代码:
View Code
#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<cmath> #include<ctime> using namespace std; #define MaxN 110 #define INF 200000000 struct atp { double x,y; }p[MaxN]; struct atp2 { double x,y,dis; }a[MaxN*50]; int n,maxx=0,maxy=0,T=1; double dis(double x,double y) { double t=0; for (int i=1;i<=n;i++) { t+=sqrt((p[i].x-x)*(p[i].x-x)+(p[i].y-y)*(p[i].y-y)); } return t; } void work() { atp temp; double tt; for (int i=1;i<=1000;i++) { for (int j=1;j<=20;j++) { temp.x=rand()%1000+1*T; temp.y=rand()%1000+1*T; for (int x=-1;x<=1;x+=2) for (int y=-1;y<=1;y+=2) { tt=dis(a[j].x+temp.x*x,a[j].x+temp.y*y); if (a[j].dis>tt) { a[j].dis=tt; a[j].x+=temp.x*x; a[j].y+=temp.y*y; } } } T*=0.97; } } int main() { srand(time(NULL)); scanf("%d",&n); for (int i=1;i<=n;i++) { scanf("%lf%lf",&p[i].x,&p[i].y); if (p[i].x>maxx) maxx=p[i].x; if (p[i].y>maxy) maxy=p[i].y; } for (int i=1;i<=20;i++) { a[i].x=rand()%maxx+1; a[i].y=rand()%maxy+1; a[i].dis=dis(a[i].x,a[i].y); } work(); double ans=INF; for(int i=1;i<=20;i++) if (a[i].dis<ans) ans=a[i].dis; printf("%0.lf",ans); return 0; }
相关文章推荐
- poj 2420 A Star not a Tree?(模拟退火)
- 【POJ 2420】A Star not a Tree?
- POJ 2420 A Star not a Tree?(二维费马点)
- Poj2420 A Star not a Tree? 模拟退火算法
- [模拟退火]POJ 2420——A Star not a Tree
- poj 2420 A Star not a Tree?(模拟退火)
- POJ 2420 A Star not a Tree? (计算几何-费马点)
- 爬山算法 (poj 2420 A Star not a Tree?)
- 【POJ 2420】 A Star not a Tree?(模拟退火)
- POJ 2420 A Star not a Tree? 费马点,模拟退火
- poj_2420_A Star not a Tree?
- POJ 2420 A Star not a Tree? (计算几何-费马点)
- POJ 2420 A Star not a Tree?
- 【POJ 2420】A Star not a Tree?
- poj 2420 A Star not a Tree?(贪心+求多边形费马点)
- poj 2420 A Star not a Tree? 随机化变步长贪心
- poj 2420 A Star not a Tree?
- POJ 2420 A Star not a Tree? 爬山算法
- poj 2420 A Star not a Tree?
- poj 2420 A Star not a Tree?