给出一个数组,然后判断其所有组合中是否能够使得和为一个给定的值,给出DFS代码如下:
#include<stdio.h>
int arr[7] = { 1, 2, 4, 8, 16, 32, 64 };
void dfs(int x, int start, int len, int sum)
{
if (x == sum)
{
printf("和为%d的情况存在...\n", x);
return;
}
if (start == len)
{
return;
}
else
{
for (int i = 0; i < 2; i++)
{
if (i == 0)
sum = sum + 0;
else
sum = sum + arr[start];
dfs(x, start + 1, len, sum);
}
}
}
int main()
{
int num;
printf("please input a num:\n");
scanf("%d", &num);
dfs(num,0,7,0);
return 0;
}
本质的思想为进入一个二状态选择路口,依次递归处理,这类的问题都可以用DFS来解决!