ACM:回溯法,子集生成
2014-07-03 20:45
197 查看
(一)增量构造法
(二)位向量法
#include <iostream> #include <algorithm> using namespace std; const int MAXN = 1000; int A[MAXN], n; void print_subset(int n, int *A, int cur) { for(int i = 0; i < cur; ++i) cout << A[i] << " "; cout << endl; int s = (cur ? A[cur-1]+1 : 0); //选取当前填到第cur个位置上的可以填的最小是数字! for(int i = s; i < n; ++i) { A[cur] = i; print_subset(n, A, cur+1); } } int main() { cin >> n; print_subset(n, A, 0); return 0; }
(二)位向量法
#include <iostream> #include <algorithm> using namespace std; const int MAXN = 1000; int B[MAXN], n; void print_subset(int n, int *B, int cur) { if(cur == n) { for(int i = 0; i < cur; ++i) { if(B[i]) cout << i << " "; } cout << endl; return ; } B[cur] = 1; //选第cur个元素 print_subset(n, B, cur+1); B[cur] = 0; //不选第cur个元素 print_subset(n, B, cur+1); } int main() { cin >> n; print_subset(n, B, 0); return 0; }必须当“所有元素是否选择”全部确定完毕后才是一个完整的子集。
相关文章推荐
- ACMjava子集生成的三种方法,增量构造,辅助位向量,二进制法
- 递归枚举,子集生成,排列生成,回溯都是解决解答树的方法,通过数值跟踪保存排序过程
- ACM_子集生成算法总结
- 递归枚举,子集生成,排列生成,回溯都是解决解答树的方法
- 任意N个数的子集生成算法
- [ACM] poj 2485 Highways (最小生成树)
- 按字典序生成{1,2,...,n}的r子集的算法-组合数学
- 枚举 子集生成
- 子集生成算法合集
- 子集生成
- 子集生成详解
- uva 1151(最小生成树,枚举子集)
- ACM 代码生成
- acm:测试数据生成方法
- 集合的子集生成(无重复元素)
- 求{1,2,3}的子集————回溯法(递归与非递归)
- **HDU-1233 还是通畅工程 ACM解题报告(kruskal+并查集求最小生成树)
- uva 11205 The Broken Pedometer(经典的子集生成题目,在此总结了三种子集生成的方法~)
- 子集生成模板、
- http://acm.hdu.edu.cn/webcontest/contest_showproblem.php?&&次小生成树