回溯法之求n个集合的幂集
2017-08-07 09:51
176 查看
幂集:有一个集合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; }
相关文章推荐
- 回溯法(深度优先搜索)求集合的幂集
- 回溯法(深度优先搜索)求集合的幂集
- javascript实现数据结构: 树和二叉树的应用--最优二叉树(赫夫曼树),回溯法与树的遍历--求集合幂集及八皇后问题
- 【回溯法】求集合的子集
- 求集合的幂集
- C++ 递归艺术----求任意集合的幂集组合和子集合的总个数
- 求集合的幂集
- 怎么计算一个集合的幂集(所有子集形成的集合)的长度?涉及组合数学基础
- 如何计算一个集合的幂集
- C语言 回溯---转非递归---- 输出集合{1,2,...n}的幂集
- 求给定集合的幂集
- 打印一个集合的幂集C++实现
- 每日一省之———— 递归 + 回溯 求集合的幂集
- 求集合的幂集
- 求集合的幂集
- 关于集合幂集问题的递归算法
- Java递归求某个集合的所有子集组成的集合,即幂集
- 巧用二叉树原理求解集合的幂集
- 二进制方法 解 集合的幂集
- C语言 集合运算 并、交,相对补,对称差,判断两个集合是否相等,求集合幂集