【文件属性】:
文件名称:子集和问题
文件大小:664B
文件格式:CPP
更新时间:2015-12-15 04:30:40
回溯法 子集数
S是一个整数集合,S={x1,x2,...,xn},c是一个整数。这里集合元素xi(1<=i<=n)和c都是整数,可能为负。
子集和问题就是:判断是否存在S的一个子集S1,使得:
使得x∈S1,∑x=c
对S集合子集树采用深度优先的顺序进行搜索,子集树从上到下每层标示着S集合中每个从左到右元素“选”或者“不选”(左1右0)。
试着用回溯算法设计解子集和问题。
Input
第一行2个数:正整数n和整数c。n表示S集合的大小,c是子集和的目标值,接下来一行中,有n个整数,表示集合S中的元素。
Output
将子集和问题的解输出,当无解时,输出"No Solution"(注意No Solution的大小写,空格,无标点)。
注意:依据S集合元素从左到右依次来画子集树,因此子集树唯一。
若存在多种子集和问题的解时,只输出在这个唯一的子集树按深度优先方向遇到的第一个解,这样保证解的唯一性,利于评判。
如:5 10
2 2 6 3 3
这里,2+2+6=10,2+2+3+3=10,但只输出2 2 6
如:5 10
2 2 3 3 6
只输出2 2 3 3
又如:5 -30
2 -2 6 -30 -3
只输出2 -2 -30
Sample Input
5 10
2 2 6 5 4
Sample Output
2 2 6
网友评论
- 可以运行!!
- 能运行~但感觉算法还有完善的地方~
- 可以运行。里面的代码没有标注,看起来有点难懂
- 有用,很有借鉴意义。一个简单的例子,给出了回溯法的一个代码运用实例
- 好代码 可以运行
- 很好,可以借鉴
- 还是可以拿来用的
- 可以正常运行,唯一不足的就是没有达到预期的效果,即有文本输入和文本输出!