求集合中的所有子集
2012-10-18 23:39
211 查看
1.先从数组中A取出一个元素,然后再从余下的元素B中取出一个元素,然后又在余下的元素C中取出一个元素 2.按照数组索引从小到大依次取,避免重复
//arr为原始数组 //start为遍历起始位置 //result保存结果,为一维数组 //count为result数组的索引值,起辅助作用 //NUM为要选取的元素个数 //arr_len为原始数组的长度,为定值 void combine_increase(int* arr, int start, int* result, int count, const int NUM, const int arr_len) { int i = 0; for (i = start; i < arr_len + 1 - count; i++) { result[count - 1] = i; if (count - 1 == 0) { int j; for (j = NUM - 1; j >= 0; j--) printf("%d\t",arr[result[j]]); printf("\n"); } else combine_increase(arr, i + 1, result, count - 1, NUM, arr_len); } }
/*增量构造法*/
#include<iostream> const int maxn=4; void print_subset(int n,int* A,int cur) { if(cur!=0){ for(int i=0;i<cur;i++){ printf("%d",A[i]); } printf("\n"); } int s=cur?A[cur-1]+1:0; for(int i=s;i<n;i++){ A[cur]=i; print_subset(n,A,cur+1); } } int main() { int A[maxn]={0,1,2,3}; print_subset(maxn,A,0); return 0; }
/*位向量*/ void print_subset(int n, int* B, int cur) { if(cur==n){ for(int i=0;i<cur;i++){ if(B[i]){ printf("%d ",i); } } printf("\n"); return; } B[cur]=1; print_subset(n,B,cur+1); b[cur]=0; print_subset(n,B,cur+1); }
/*二进制法*/ void print_subset(int n,int s) { for(int i=0;i<n;i++){ if(s&(1<<i)){ printf("%d ",i); } } printf("\n"); } for(int i=0;i<(1<<n);i++){ print_subset(n,i); }
相关文章推荐
- 枚举集合所有子集。
- BackTrack-----找出一个集合的所有子集(78. Subsets)
- 输出一个集合的所有子集(算法)
- 生成一个整数集合的所有子集
- 返回某集合的所有子集
- Leetcode031--集合的所有子集
- 求一个集合的所有子集问题
- 求集合的所有子集的算法
- 利用素数证明可数集的所有有限子集形成的集合是可数集
- 生成集合[n]的所有k-子集MATLAB代码
- 集合所有子集,无字典顺序与有字典顺序的两种解法(C/OC)
- 关于群部分含同态映射函数的核的集合到G2所有子集集合的映射函数为同态映射函数(例17.45)
- 输出一个集合所有子集的元素和(Print sums of all subsets of a given set)
- 递归求集合的所有子集的程序
- 编写一个方法,返回某集合的所有子集。
- 求一个集合的所有子集
- 给定一个集合和一个正整数c,判定是否存在该集合的子集,使其所有元素的和等于给定的正整数c?
- 【HDU5650 BestCoder Round 77 (div2) A】【水题】so easy 集合所有子集异或和的异或和
- 用 Lisp 语言计算一个集合的所有子集构成的新集合
- 求一个集合的所有子集