poj 2420 A Star not a Tree?——模拟退火

Posted narh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj 2420 A Star not a Tree?——模拟退火相关的知识,希望对你有一定的参考价值。

题目:http://poj.org/problem?id=2420

精度设成1e-17,做三遍。ans设成double,最后再取整。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<cstdlib>
#include<ctime>
#define db double
using namespace std;
const int N=105;
const db dc=0.99,eps=1e-17;
int n,nx[N],ny[N];
db px,py,ans;
db dis(db x0,db y0,db x1,db y1)
{
  return sqrt((x0-x1)*(x0-x1)+(y0-y1)*(y0-y1));
}
db calc(db x,db y)
{
  db ret=0;
  for(int i=1;i<=n;i++)ret+=dis(nx[i],ny[i],x,y);
  return ret;
}
db gtrd(db T){return (rand()*2-RAND_MAX)*T;}
void SA(db T)
{
  db x0=px,y0=py,pr=calc(x0,y0),x,y,cr;
  while(T>eps)
    {
      x=x0+gtrd(T); y=y0+gtrd(T); cr=calc(x,y);
      if(cr<pr||(exp((cr-pr)/T)*RAND_MAX<rand()))
    {
      ans=min(ans,cr);
      x0=x;y0=y;pr=cr;
    }
      T*=dc;
    }
}
int main()
{
  srand(time(0));
  scanf("%d",&n);
  for(int i=1;i<=n;i++)scanf("%d%d",&nx[i],&ny[i]),px+=nx[i],py+=ny[i];
  px/=n; py/=n; ans=calc(px,py);
  SA(10000);SA(10000);SA(10000);
  printf("%.0lf
",ans);
  return 0;
}

 

以上是关于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? —— 模拟退火

[POJ2420]A Star not a Tree?