码迷,mamicode.com
首页 > 其他好文 > 详细

POJ 2069 Super Star

时间:2016-07-22 21:19:20      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:

模拟退火。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define maxn 30
#define eps 1e-7
using namespace std;
struct point
{
    double x,y,z;
}p[maxn],s;
int n;
double delta=0.98;
double dist(point a,point b)
{
    return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)+(a.z-b.z)*(a.z-b.z));
}
double solve()
{
    s.x=s.y=s.z=0;
    int regis=1;
    double ans=1e30,t=100;
    while (t>eps)
    {
        for (int i=1;i<=n;i++)
            if (dist(s,p[i])>dist(s,p[regis]))
                regis=i;
        double mt=dist(s,p[regis]);
        ans=min(ans,mt);
        s.x+=(p[regis].x-s.x)/mt*t;
        s.y+=(p[regis].y-s.y)/mt*t;
        s.z+=(p[regis].z-s.z)/mt*t;
        t*=delta;
    }
    return ans;
}
int main()
{
    for (;;)
    {
        scanf("%d",&n);
        if (n==0) break;
        for (int i=1;i<=n;i++)
            scanf("%lf%lf%lf",&p[i].x,&p[i].y,&p[i].z);
        printf("%.5lf\n",solve());
    }
    return 0;
}

 

POJ 2069 Super Star

标签:

原文地址:http://www.cnblogs.com/ziliuziliu/p/5697058.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!