深度优先算法求含有N个元素的集合的全部组合(即:在集合中选1,2,3...N个元素的所有组合,不是排列)

通过深度优先搜索算法解决寻找集合中1至N个元素的所有组合问题。核心思路是对每个元素,分别考虑包含和不包含它的情况,递归求解子问题,从而得到所有可能的组合。当元素和等于目标值K时,找到答案。
摘要由CSDN通过智能技术生成

先来看一道题:给定整数:a1, a2, a3.....an, 判断是否可以从中选出任意个数,使其和等于K, (数字的个数,取1--N个数都可以),

这道题要求找出这N个数中选1,2,3...N个元素的所有组合,如果任何一个组合满足和为K, 就找到了答案,所以:本质上,这道题就是要求出这个集合的所有的组合,怎么求所有的组合? 我的理解:对任何元素a 属于A集合, 求

子问题1 :包含这个元素时的组合,

再加上 子问题 2 :不包含这个元素的组合 

子问题1, 和子问题2本质上又是和包含这两个子问题的父问题本质上是一样的,所以用递归可以解决:如下某个这是一道典型的可以用深度优先算法

// N为数组中元素的总个数, k为所要求的和

bool  dfs(int i, int sum){
if (N ==i ){

return sum == k ;
}
// 不加上a[i]的情况
if (dfs(n + 1, sum)) return true;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值