社区讨论

dfs+剪枝求调!!!

P1433吃奶酪参与者 2已保存回复 5

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@m6bydllp
此快照首次捕获于
2025/01/25 16:52
去年
此快照最后确认于
2025/11/04 10:40
4 个月前
查看原帖
不是,为什么好好的深搜+剪枝题题解全是状压dp啊!
写不了一点,这还是绿题吗?甚至还有模拟退火的
吐槽完了,还请大佬调一下我的代码
CPP
//#pragma GCC optimize(2)
//#pragma GCC optimize(3)
#include<iostream>
#include<cmath>
using namespace std;
int n;
bool b[16];
double ans=1<<30;
pair<int,int> a[16];
inline double dis(int x1,int y1,int x2,int y2)
{
	return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
void dfs(int k,int pre,double sum)
{
	if(k>n)
	{
		ans=min(ans,sum);
		return;
	}
	if(sum>ans) return;
	for(register int i=1;i<=n;i++)
	  if(b[i]==0)
	  {
	  	b[i]=1;
	  	dfs(k+1,i,sum+dis(a[i].first,a[i].second,a[pre].first,a[pre].second));
	  	b[i]=0;
	  }
}
int main()
{
	scanf("%d",&n);
	a[0].first=0;a[0].second=0;
	for(register int i=1;i<=n;i++)
	  scanf("%d%d",&a[i].first,&a[i].second);
	dfs(1,0,0);
	printf("%.2lf",ans);
	return 0;
}
最后请管理员放一篇dfs的题解吧

回复

5 条回复,欢迎继续交流。

正在加载回复...