回溯法之求n个集合的幂集
2015-06-30 19:27
381 查看
幂集:有一个集合A,集合A的幂集是由集合A的所有子集所组成的集合。
集合中的每个元素只有两种状态:属于幂集的元素集或不属于幂集的元素集。
集合{1,2,3},用一棵二叉树来表示。
递归函数
打印函数
主函数
集合中的每个元素只有两种状态:属于幂集的元素集或不属于幂集的元素集。
集合{1,2,3},用一棵二叉树来表示。
递归函数
void GetPowerSet(int i,int length,int A[],int B[]){ int C ; memcpy(C, B, 10 * sizeof(int)); //复制数组B,解决c++数组的传址的问题 if (i >= length){ printfArr1(C, length); //打印出幂集的一个元素 } else { GetPowerSet(i + 1, length, A, C); //不选择第i个元素,直接处理数组的第i+1个元素 C[i] = A[i]; //选择第i个元素 GetPowerSet(i+1,length,A,C); } }
打印函数
void printfArr1(int B[],int length){ if (length > 0){ for (int i = 0; i<length; i++){ if (i + 1 == length) { if (B[i] == 0){printf("\n"); continue;} printf("%d \n", B[i]); } else { if (B[i] == 0)continue; printf("%d ,", B[i]); } } } }
主函数
const int N=10; int main() { int A = { 2, 1, 3, 4, 5, 6, 7, 8, 9, 10 }; int D[N] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; GetPowerSet(0, N, A, D); return 0; }
相关文章推荐
- AVG 7.5.1.43 版本 序列号 集合
- SQL Server游标的使用/关闭/释放/优化小结
- C#中的递归APS和CPS模式详解
- WinForm实现按名称递归查找控件的方法
- C#检查指定对象是否存在于ArrayList集合中的方法
- C#中的尾递归与Continuation详解
- C#递归实现显示文件夹及所有文件并计算其大小的方法
- php递归创建目录的方法
- C#中的集合用法分析
- Javascript递归打印Document层次关系实例分析
- JavaScript Archive Network 集合
- Backbone.js中的集合详解
- jQuery学习7 操作JavaScript对象和集合的函数
- 网页代码常用小技巧总结第1/3页
- 详解JAVA高质量代码之数组与集合
- 基于Java回顾之集合的总结概述
- 探讨:如何使用委托,匿名方法对集合进行万能排序
- oracle 使用递归的性能提示测试对比
- 使用curl递归下载软件脚本分享
- Perl脚本实现递归遍历目录下的文件