洛谷 p2404 自然数拆分问题

题目链接
题目描述
任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。现在给你一个自然数n,要求你求出n的拆分成一些数字的和。每个拆分后的序列中的数字从小到大排序。然后你需要输出这些序列,其中字典序小的序列需要优先输出。
方法:深搜
写题时我也不知道如何深搜,还是看了大佬的解析才知道怎么用深搜,这道题可以打表,因为就n<=8,我这就贴一下我借鉴大佬的代码写的代码
(要是介意的话,可以联系我删帖)

#include
using namespace std;
int f[10];
int n;
//a是下标,b是和,c是为了防止后面的值小于前面的值
void df(int a,int b,int c) 
{
	if(b==n)//输出
	{
		for(int i=1;i<a-1;i++) cout<<f[i]<<'+';
		cout<<f[a-1]<<endl;
		return;
	}
	if(b>n) return;
	for(int i=c;i<n;i++)
	{
		f[a]=i;
		df(a+1,b+i,i);//这里千万不能在前面写b=b+i,不然b会被加很多次,会导致错误,我就犯了这种错
	}
	return;
}
int main()
{
	cin>>n;
	df(1,0,1);
}

你可能感兴趣的:(DFS问题,洛谷题目,c++)