枚举 子集生成
2012-08-07 18:24
260 查看
增量构造法
带给定数组P
自然序列
二进制位数表示非递归枚举方法
带给定数组P
void print_subset(int n, int *A,int *P, int cur, int pos) { int i; for (i = 0; i < cur; i++) { printf("%d ", A[i]); } printf("\n"); if (pos < n - 1) { for (i = pos; i < n; i++) { if (!cur || A[cur - 1] != P[i]) { A[cur] = P[i]; print_subset(n, A, P, cur + 1, i); } } } }
自然序列
void print_subset1(int n, int *A, int cur) { int i; for (i = 0; i < cur; i++) //打印当前集合 printf("%d ", A[i]); printf("\n"); cnt++; int s = cur ? A[cur - 1] + 1 : 0; for (i = s; i < n; i++) { A[cur] = i; print_subset1(n, A, cur + 1); } }
二进制位数表示非递归枚举方法
void print_subset2(int n, int s) { int i; for (i = 0; i < n; i++) { if (s & (1 << i)) printf("%d ", i); } printf("\n"); cnt++; } for (i = 0; i < (1 << n); i++) { print_subset2(n, i); }
相关文章推荐
- 【最小生成树+子集枚举】Uva1151 Buy or Build
- 关于算法竞赛入门经典一书的思考学习——枚举排序和子集生成!
- 递归枚举,子集生成,排列生成,回溯都是解决解答树的方法,通过数值跟踪保存排序过程
- uva 11205 The broken pedometer(暴力枚举+子集生成)
- UVA 1151 Buy or Build(最小生成树+枚举子集)
- UVA - 1151 Buy or Build(最小生成树+二进制枚举子集)
- uva 1151(最小生成树,枚举子集)
- UVA1151[Buy or Build] 子集枚举+最小生成树
- 递归枚举,子集生成,排列生成,回溯都是解决解答树的方法
- uva-1151-Buy or Build-二进制枚举子集,并查集,最小生成树,kruskal
- C#:USB设备枚举(五)生成TreeView数据源
- TYVJ4869 罪犯分组 状压DP枚举子集
- 生成子集以及置换
- [最小生成树+二进制枚举]UVa1151 - Buy or Build
- uva 131(枚举子集)
- 子集生成
- 枚举一定条件的子集
- 【java】全排列 枚举子集
- 枚举一个数的子集
- 增值构造法子集生成