子集生成
来源:互联网 发布:日本人怕中国吗 知乎 编辑:程序博客网 时间:2024/05/03 07:25
#include <iostream>using namespace std;// 增量构造法void print_set(int *A, int n , int cur) { // 打印当前集合 for(int i = 0; i < cur; i++) { cout << A[i] << " "; } cout << endl; // 确定当前元素的最小可能值 int s = cur ? A[cur - 1] + 1 : 0; for(int i = s; i < n; i++) { A[cur] = i; print_set(A, n, cur + 1); }}// 位向量法void print_set2(int *B, int n, int cur) { if(cur == n) { for(int i = 0; i < n; i++) { // 打印集合 if(B[i]) { cout << i << " "; } } cout << endl; return ; } // 选择第cur个元素 B[cur] = 1; print_set2(B, n, cur + 1); // 不选第cur个元素 B[cur] = 0; print_set2(B, n, cur + 1);}// 二进制法// 打印{0,1,..., n-1}的子集s// 集合s 101// 对应于{2, 0}void print_subset(int n, int s) { for(int i = 0; i < n; i++) { // 集合s与(1右移i)位做位运算 // 这样能使集合s中为1的位输出 if(s & (1 << i)) { cout << i << " "; } } cout << endl;}void print_set3(int n) { // 枚举各子集所对应的编码0,1,...,2^n-1 for(int i = 0; i < (1 << n); i++) { print_subset(n, i); }}int main() { int A[100];// print_set(A, 3, 0);// print_set2(A, 3, 0); print_set3(3);}
0 0
- 生成子集
- 子集生成
- 子集生成
- 子集生成
- 子集生成
- 子集生成
- 子集生成
- 生成子集
- 生成子集
- 子集生成
- 子集生成
- 子集生成
- 子集生成
- 子集生成
- 子集生成
- 子集生成
- 子集生成
- 子集生成
- minGW,MinSyS,CMake 安装
- Netbeans opencv 安装
- 响铃:主打拍照的手机厂商们,换机时代能否自救?
- Servlet的生命周期
- Java 数据结构之数组的操作一:初级
- 子集生成
- 使用.net实现邮件发送
- ssl例五
- SERVLETJSP学习(九)—— EL、JSTL
- LeetCode-53.Maximum Subarray
- 动态规划:最长子序列问题
- 浙大2016上机考研题
- 高级映射:一对多查询
- [POJ2663]Tri Tiling(dp)