深度优先搜索dfs(求和)

问题

现有4个数,分别为{1,3,4,7},是否可以由其中不重复的加和得到14?

dfs分析

深度优先搜索其实就是树状结构,又因使用了递归所以隐式的引用了栈的数据结构。
在写递归函数时第一个if必定是对结束条件的阐述,其后的if则是各种情况下的分支。

针对本题的图解(其实是老师画的)

(在此再次感谢老师的精心讲解)

深度优先搜索dfs(求和)_第1张图片

源码

#include 
using namespace std;
#define	N 4 
#define k 13
int a[4] = { 1,3,4,7 };
bool dfs(int n,int sum)
{
	if (n == N) return sum == k;
	if (n + 1, sum) return true;
	if (n + 1, sum + a[n]) return true;
	return false;
}
int main()
{
	if (dfs(0, 0))
		cout << "true" << endl;
	else
		cout << "false" << endl;
	return 0;
}

你可能感兴趣的:(深度优先搜索dfs(求和))