dfs+剪枝求调!!!
  • 板块P1433 吃奶酪
  • 楼主Markcpp13
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/1/25 16:51
  • 上次更新2025/1/25 20:36:10
查看原帖
dfs+剪枝求调!!!
755674
Markcpp13楼主2025/1/25 16:51

不是,为什么好好的深搜+剪枝题题解全是状压dp啊!

写不了一点,这还是绿题吗?甚至还有模拟退火的

吐槽完了,还请大佬调一下我的代码

//#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的题解吧

2025/1/25 16:51
加载中...