列出所有子集----------2013年1月3日
来源:互联网 发布:nagios在linux行业方面 编辑:程序博客网 时间:2024/05/25 08:12
问题描述:列出一个集合的所有子集,包括空子集合。
我的思路:回溯法的一种思路就是生成一颗子集树,而一个集合中的元素,要么存在于子集中,要么不存在,所以这又特殊化成一颗二叉树了。每当到达二叉树的底端时,就打印一次。很容易写出如下的代码:
1 #include <stdio.h> 2 #define MAX 1000 3 4 int n=3; //the number of the set elements 5 int set[MAX]={1,2,3}; 6 int count=0;//the number of the subset. 7 8 void DFS(int level); 9 void print_set();10 11 int main()12 {13 DFS(0);14 return 0;15 }16 17 void DFS(int level)18 {19 if(level==n)20 {21 print_set();22 return ;23 }24 int save=set[level];25 set[level]=0;26 int index=0;27 for(index=0;index<2;index++)28 {29 DFS(level+1);30 set[level]=save;31 }32 33 }34 35 void print_set()36 {37 int index;38 count++;39 printf("%d: {",count);40 for(index=0;index<n;index++)41 {42 if(set[index]!=0) 43 printf("%d ",set[index]);44 }45 printf("}\n");46 }
- 列出所有子集----------2013年1月3日
- 列出所有子集(采用列出2进制数的方法)-------------2013年1月4日
- 列出所有子集-----字典顺序 2013年1月14日
- 列出所有K个元素的子集-----2013年1月26日
- 列出{1,2,,,,n}的所有子集
- 列出所有子集
- oracle 列出时间范围内所有日和所有月
- [3月22日的脚本] 列出所有的群集服务器 (PowerShell)
- 列出所有子集(二进制递增方式)
- 列出所有子集(字典顺序)
- 列出所有子集(格雷码顺序)
- 列出所有K个元素的子集
- 每日一小练——列出所有子集
- 2013年3月1日
- 列出一个集合的所有非空子集
- 每日一小练——按字典顺序列出所有子集
- 产生所有排列---旋转法------2013年1月22日
- 产生所有排列---字典顺序-----2013年1月23日
- 网络Json解析
- javascript单引号和双引号区别
- 大电容滤低频,小电容滤高频?—滤波电容的选择
- 《coredump问题原理探究》windows版9.1节栈溢出
- jni学习
- 列出所有子集----------2013年1月3日
- UIView实现圆角的做法
- 小波变换中噪声估计方法
- buffer vs. cache
- 插入排序Insertion sort
- 未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序
- 小谈版本控制VSS
- 巨人网络2012年10月11日大连理工大学宣讲会C++开发工程师笔试题
- 日期时间参数大全(一)