/* 时间:2011-11-21 作者:xiaosi 题目:子集和问题*/#include<iostream>#include<cstdio>using namespace std;#define M 100class SumOfSub{ friend void sumofsub(); private: void Backtrack(int t); int count; int n; int c; int cw; int x[M]; int bestx[M]; int num[M];};void SumOfSub::Backtrack(int t){//搜索t第层 int i,j; if(t>n)//到达叶子节点 { if(cw == c&&count ==0) { count++; for(i=1;i<=n;i++) { if(x[i]==1) { printf("%d ",num[i]); } } printf("\n"); } return; } else { if(cw+num[t]<= c) { cw+=num[t]; x[t]=1; Backtrack(t+1); cw-=num[t]; } x[t]=0; Backtrack(t+1); }}void sumofsub(){ int i,j; SumOfSub s; s.cw = 0; s.count =0; scanf("%d %d",&s.n,&s.c); for(j=1;j<=s.n;j++) { scanf("%d",&s.num[j]); } for(j=1;j<=s.n;j++) { s.x[j]=0; } s.Backtrack(1); if(s.count == 0) { printf("No Solution!"); }}int main(){ sumofsub(); return 0;}
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.youkuaiyun.com/jiangjunshow