C++ 递归艺术----求任意集合的幂集组合和子集合的总个数
2014-09-11 21:50
1286 查看
#include <stdio.h> #include <string.h> #define MAX_LENGTH 100 /*集合的最大元素个数*/ void PowerSet(char*, int, char*,int *); int main() { char a[MAX_LENGTH]; /*存储输入的集合*/<br /> char set[MAX_LENGTH]={"\0"}; /*储存集合的幂集元素*/<br /> int NumOfPowerSet=0; /*幂集元素记数*/<br /> printf("Input the elements:");<br /> scanf("%s",a);<br /> printf("----------------------------\n");< PowerSet(a,0,set,&NumOfPowerSet); /*调用递归函数*/ printf("----------------------------\n"); printf("Number of PowerSet: %d\n",NumOfPowerSet); return 1;<br /> }< /* //参数说明:char* a : 待求幂集的集合 int i : 当前分析到集合的第i个元素 char* set : 存储当前幂集元素状态 int* Num : 幂集元素记数 */ void PowerSet(char* a, int i, char* set, int * Num) { char TempSet[MAX_LENGTH]; strcpy(TempSet,set); if(i>=strlen(a)) { printf("{%s}\n",set); (*Num)++; } else { PowerSet(a,i+1,TempSet,Num); strncat(TempSet,(a+i),1); PowerSet(a,i+1,TempSet,Num); } } /* 输入测试数据:ABCD,表示集合{A,B,C,D},得到输出数据如下:Input the elements:ABCD ------------------------- {}{D}{C}{CD}{B}{BD}{BC}{BCD}{A}{AD}{AC}{ACD}{AB}{ABD}{ABC}{ABCD} -------------------------Number of PowerSet: 16 */
相关文章推荐
- c++求集合的幂集-递归实现
- 递归求字母集合的子集C++
- java:递归:10元钱按1,2,5元任意组合
- 经典递归算法之排列,组合,集合和换零钱, Python yield实现.
- 对N各集合中的任意元素进行排列组合问题
- 打印一个集合的幂集C++实现
- C语言 回溯---转非递归---- 输出集合{1,2,...n}的幂集
- 每日一省之———— 递归 + 回溯 求集合的幂集
- 非递归枚举排列组合(C++)
- delphi 递归实现从m 个集合中 任取一个元素 生成组合
- c++递归实现关于无向图中任意两点的最短距离
- C/C++ 排列组合问题(递归)
- 非递归枚举排列组合(C++)
- 算法——递归生成集合的所有组合
- 集合中各元素任意组合的枚举方法
- C++递归问题之三---0-1背包问题:给定两个值value和num,在1到num之间取值使这些数和为value,输出所有组合
- c++求集合幂集 源代码及算法优化
- C++实现递归实现数字的组合
- 集合的幂集(C++)
- 非递归求集合的幂集