任务描述
设集合S={x1,x2,…,xn}是一个正整数集合,c是一个正整数,子集和问题判定是否存在S的一个子集S1,使S1中的元素之和为c。试设计一个解子集和问题的回溯法
输入格式
输入数据第1行有2个正整数n和c,n表示S的大小,c是子集和的目标值
接下来的1行中,有n个正整数,表示集合S中的元素
n<10,c<100
输出格式
输出所有满足条件的集合,当问题无解时,输出“No Solution!”。
注意:末尾不输出多余空格
按照输入顺序输出,比如第一个满足条件的子集合是[2 2 6],那么就先输出它,子集合内的数也按照输入顺序输出
Sample Input
5 10
2 2 6 5 4
Sample Output
2 2 6
6 4
#include<stdio.h>
int a[100],x[100],n,c,nc,rc,count;
void dfs(int i,int nc,int rc)
{
if(i==n)
{
if(nc==c){
//输出
int flag=1;
for(int k=0;k<n;k++)
{
if(x[k]==1)
{
if(flag) flag=0;
else printf(" ");
printf("%d",a[k]);