#include #include int len; // 输入长度.int sum; // 和.int *data; // 数据.char *output; // 所求子集元素,与输入数据对应,'Y'为取.// 获取输入.void GetInput(){ int i; printf("输入集合个数: "); scanf("%d", &len); while(len <= 0){ printf("集合个数必须大于0: "); scanf("%d", &len); } data = new int[len]; output = new char[len]; for(i = 0; i < len; i++){ printf("输入第%d个数: ", i+1); scanf("%d", &data[i]); output[i] = 'N'; } printf("输入子集和: "); scanf("%d", &sum); while(sum <= 0){ printf("子集和必须大于0: "); scanf("%d", &len); }}// 回朔求解:有解返回非0值,无解返回0.int GetRes(){ int p = 0; // 指向当前值. int temp = 0; // 当前子集合和. while(p >= 0){ if('N' == output[p]){ // 选中当前项. output[p] = 'Y'; temp += data[p]; if(temp == sum){ return 1; } else if(temp > sum){ output[p] = 'N'; temp -= data[p]; } p++; } if(
子集和问题---来源于 计算机算法设计与分析(王晓东)
最新推荐文章于 2020-12-23 22:13:22 发布
该博客介绍了如何解决子集和问题,提供了一个C语言实现的回溯法求解程序。用户输入集合元素和目标和,程序判断是否存在子集满足条件并打印结果。示例输入和输出展示了具体应用。
摘要由CSDN通过智能技术生成