A Star not a Tree?
查看代码
#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>
#define db double
#define inf 1e15
#define eps 1e-15
using namespace std;
int n;
db ax,ay,ans=inf,best=inf;
db down=0.98,T0=3000;
struct point{
db x,y;
}s[105];
db dist(point A,point B){
return sqrt((A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y));
}
db getv(point x){
db sum=0;
for(int i=1;i<=n;i++)sum+=dist(x,s[i]);
return sum;
}
void solve(){
for(db t=T0;t>eps;t*=down){
db nx=ax+(rand()*2-RAND_MAX)*t;
db ny=ay+(rand()*2-RAND_MAX)*t;
db v=getv((point){nx,ny});
db de=v-ans;
if (de<0 || exp(-de/t)*RAND_MAX>rand()){
ax=nx;ay=ny;
ans=v;
}
best=min(best,ans);
}
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%lf%lf",&s[i].x,&s[i].y);
ax+=s[i].x,ay+=s[i].y;
}
ax/=n;ay/=n;
ans=getv((point){ax,ay});
for(int i=1;i<=100;i++)solve();
printf("%d\n",(int)(best+0.5));
return 0;
}
模拟退火好题
模拟退火:一种随机化算法
一开始有一个温度T0,温度会乘以下降系数down
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人