深度优先搜索指的是从某状态开始不断转移状态直到无法转移,退回前一状态,继续转移。如树的先序遍历,中序遍历和后序遍历。下面给出例子
假设给定n个整数a1,a2,...,an,来判断是否能从中挑出一些数,使他们的和为k。代码如下
#include <stdio.h>
const MAX_N=20;
static int n,a[MAX_N],k;
bool dfs(int i,int sum)
{
if(i==n)
return sum==k;
if(dfs(i+1,sum))
return true;
if(dfs(i+1,sum+a[i]))
return true;
return false;
}
int main()
{
scanf("%d",&n);
for(int count=0;count<n;count++)
scanf("%d",&a[count]);
scanf("%d",&k);
if(dfs(0,0))
printf("Yes\n");
else
printf("No\n");
return 0;
}