ACM:回溯法,子集生成
来源:互联网 发布:铝合金门 知乎 编辑:程序博客网 时间:2024/06/05 08:05
(一)增量构造法
#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;}必须当“所有元素是否选择”全部确定完毕后才是一个完整的子集。
0 0
- ACM:回溯法,子集生成
- 回溯法---子集和
- 回溯法-子集和数问题
- 回溯法---->子集和数问题
- 回溯法 子集和问题
- 回溯之子集树法
- 【回溯法】求子集问题
- 回溯法求子集,排列组合
- 回溯法之子集树
- 回溯法——求子集
- 回溯法:子集树与排列树
- 回溯法——求子集 收藏
- 回溯法(子集树)----- 装载问题
- 回溯法 求所有子集 所有排列
- 回溯法求集合的所有子集
- 回溯法之子集和问题
- 回溯法2--子集和问题
- 回溯法 求集合全排列、子集
- JAVA学习篇--JSTL基础
- WinForm自定义窗体
- OSG中使用png图片显示透明效果
- Linux 内存详细信息
- java将异常堆栈转换为字符串
- ACM:回溯法,子集生成
- xcode环境变量
- QT在WIN7下开发环境的搭建
- Ubuntu Linux中vsFTP添加用户
- C语言中的static 详细分析
- oracle基础之临时表
- LINUX下的C C++ 混编
- Java面试参考指南(一)
- hdu2374 A Game with Marbles(简单数学题)