社区讨论
dfs超时了,50分,大佬们有没有什么优化方法QAQ
P1433吃奶酪参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @lo2nuygn
- 此快照首次捕获于
- 2023/10/23 16:53 2 年前
- 此快照最后确认于
- 2023/10/23 16:53 2 年前
C
#include<bits/stdc++.h>
using namespace std;
struct point{
double x;
double y;
};
inline double dis(point a,point b){
double t1=(a.x-b.x)*(a.x-b.x);
double t2=(a.y-b.y)*(a.y-b.y);
return sqrt(t1+t2);
}
int n;
point p[20];
double ans=100000001;
bool v[20];
int path[20];
void dfs(int a){
if(a>n){
double temp=0;
for(int i=1;i<=n;i++){
temp+=dis(p[path[i-1]],p[path[i]]);
}
ans=min(ans,temp);
}
for(int i=1;i<=n;i++){
if(!v[i]){
path[a]=i;
v[i]=true;
dfs(a+1);
v[i]=false;
}
}
}
int main(){
cin>>n;
p[0]={0,0};
for(int i=1;i<=n;i++){
cin>>p[i].x>>p[i].y;
}
dfs(1);
printf("%.2f",ans);
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...