回溯法寻找元素之和等于目标值的子集

这是一个回溯法的算法,可以用来寻找所有元素之和等于目标值的子集.

整个算法中最重要的是:在递归之后"恢复现场"

也就是:

t[cnt]=0;
cnt--;

完整代码(注释部分打印信息可以用来辅助理解递归过程):

#include
#include
using namespace std;
const int N=1010;
int x[N],t[N];
int cnt,n,goal;
void BACKTRACKREC(int k)
{	
	for(int i=1;i<=n;i++)
	{	
		t[cnt++]=x[i];
		int total=0;
		for(int i=0;igoal)
		{
			t[cnt]=0;
			cnt--;
		}
		if(total==goal)
		{
			for(int i=0;i>n>>goal;
	
	for(int i=1;i<=n;i++)
		scanf("%d",&x[i]);
	
	BACKTRACKREC(1);
	
	return 0;
}

运行结果:

回溯法寻找元素之和等于目标值的子集_第1张图片

你可能感兴趣的:(算法)