为什么我这个dfs会输出很多重复???
查看原帖
为什么我这个dfs会输出很多重复???
576674
AnotherDay楼主2021/12/4 13:11
#include<iostream>
#include<cstdio>
using namespace std;
bool v[40]={false};//记录是否用 
int a[40];//记录数 
	int n;
	int cnt;
void dfs(int left,int right,int sum);//左边界右边界,和 
void Print(void);
int main()
{
	cin>>n;
	int i,j;
	for(i=1;i<=n;i++)
	{
		for(j=n/i;j>=1;j--)//记录能拆分的数 
		{
			cnt++;
			a[cnt]=i;
		}
	}
	dfs(1,cnt,n);
	return 0;
}
void Print(void)
{
	int flag=0;
	for(int i=1;i<=cnt;i++)
	{
		if(v[i]==1)
		{
			if(flag==0)//第一个数字 
			{
				printf("%d",a[i]);
				flag=1;
			}else
			{
				printf("+%d",a[i]);
			}
		}
	}
	printf("\n");
	return;
}
void dfs(int left,int right,int sum)
{
	if(left>=right)
	{
		return;
	}
	if(sum<0)
	{
		return;
	}
	if(sum==0)
	{
		Print();
		return;
	}
	
	for(int i=left;i<=right;i++)
	{
		if(v[i]==0)
		{
			v[i]=1;
			dfs(left+1,right,sum-a[i]);
			v[i]=0;
		}
	}
}

会输出非常非常多,而且大量重复! 不明白我这样是为什么会出错 求大佬指点

2021/12/4 13:11
加载中...