#include<bits/stdc++.h>#defineitnint#definegIgiusingnamespace std;inlineintgi(){int f =1, x =0;char c =getchar();while(c <'0'|| c >'9'){if(c =='-') f =-1; c =getchar();}while(c >='0'&& c <='9') x = x *10+ c -'0', c =getchar();return f * x;}int n;double x[20], y[20], dis[20][20], ans =1000000000.0, dp[20][1<<16];inlinedoublegetjuli(double x,double y,double xx,double yy){returnsqrt((x - xx)*(x - xx)+(y - yy)*(y - yy));}intmain(){//freopen(".in", "r", stdin);//freopen(".out", "w", stdout);
n =gi();for(int i =1; i <= n; i+=1)scanf("%lf %lf",&x[i],&y[i]);for(int i =1; i <= n; i+=1)for(int j =1; j <= n; j+=1)
dis[i][j]=getjuli(x[i], y[i], x[j], y[j]);//预处理出两点间的距离memset(dp,127,sizeof(dp));for(int s =1; s <=(1<< n)-1; s+=1){for(int i =1; i <= n; i+=1){if(!(s &(1<<(i -1))))continue;if(s ==(1<<(i -1))){dp[i][s]=0;continue;}//边界for(int j =1; j <= n; j+=1){if((!s &(1<<(j -1)))|| i == j)continue;
dp[i][s]=min(dp[i][s], dp[j][s -(1<<(i -1))]+ dis[i][j]);//转移}}}for(int i =1; i <= n; i+=1){double ss = dp[i][(1<< n)-1]+getjuli(0,0, x[i], y[i]);//注意加上到点(0,0)的距离if(ss < ans) ans = ss;}printf("%.2lf\n", ans);return0;}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 数据库服务器 SQL Server 版本升级公告
· 程序员常用高效实用工具推荐,办公效率提升利器!
· C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)