模拟退火板子 求空间上一点到所有点距离最小

#include<bits/stdc++.h>
using namespace std;
const int N=110;
#define pdd pair<double,double>
pdd q[N];
int n;
double rand(double l,double r)
{
    return (double)rand()/RAND_MAX*(r-l)+l;
}
double ans=1e18;
double calc(double x,double y)
{
    double res=0;
    for(int i=0;i<n;i++)
    res+=sqrt((q[i].first-x)*(q[i].first-x)+(q[i].second-y)*(q[i].second-y));
    ans=min(res,ans);
    return res;
}
void simulata_anneal()
{
    pdd cur(rand(0,10000),rand(0,10000));
    for(double T=10000;T>1e-4;T*=0.99)
    {
        pdd np(rand(cur.first-T,cur.first+T),rand(cur.second-T,cur.second+T));
        double dt=calc(np.first,np.second)-calc(cur.first,cur.second);
        if(exp(-dt/T)>rand(0,1))    cur=np;
    }
}
int main()
{
    cin>>n;
    for(int i=0;i<n;i++)
        cin>>q[i].first>>q[i].second;
    for(int i=0;i<100;i++)
    simulata_anneal();
    printf("%.0lf\n",ans);
    return 0;
}
全部评论

相关推荐

程序员小白条:可以,技术栈别写太多,因为学院本这块,没必要太多,项目的话可以提前,技术栈放最下面,要么技术栈放最前面,多准备下八股文
点赞 评论 收藏
分享
03-04 17:20
电力电子工程师
YOUXIANG:你的实习经历和你的项目对不上,搞电源的为什么不去电源厂实习。简历字有点多?单反激和PFC LLC两个项目,技术面可以问的东西都特别多,细节很多,磁性元件设计那些。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务