社区讨论

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 条回复,欢迎继续交流。

正在加载回复...