1 #include <bits/stdc++.h>
2 #define _for(i,a,b) for(int i = (a);i < (b);i ++)
3 using namespace std;
4
5 vector<vector<int>> rnt;
6 void print_subset1(vector<int> A,vector<int> B)
7 {
8 vector<int> tmp;
9 _for(i,0,A.size())
10 tmp.push_back(B[A[i]]);
11 rnt.push_back(tmp);
12
13 int s = A.size() ? A[A.size()-1]+1 : 0;
14 _for(i,s,B.size())
15 {
16 A.push_back(i);
17 print_subset1(A,B);
18 A.pop_back();
19 }
20 }
21
22 void print_subset2(vector<int> A,vector<int> B)
23 {
24 if(A.size()==B.size())
25 {
26 vector<int> tmp;
27 _for(i,0,A.size())
28 if(A[i]) tmp.push_back(B[i]);
29 rnt.push_back(tmp);
30 return ;
31 }
32 A.push_back(1); print_subset2(A,B);
33 A.pop_back(); A.push_back(0);print_subset2(A,B);
34 }
35
36 void _print_subset3(vector<int> B,int s)
37 {
38 vector<int> tmp;
39 _for(i,0,B.size())
40 if(s&(1<<i)) tmp.push_back(B[i]);
41 rnt.push_back(tmp);
42 }
43
44 void print_subset3(vector<int> B)
45 {
46 _for(i,0,1<<B.size())
47 _print_subset3(B,i);
48 }
49
50 void print_rnt()
51 {
52 _for(i,0,rnt.size())
53 {
54 _for(j,0,rnt[i].size())
55 {
56 cout << rnt[i][j] << " ";
57 }
58 cout << endl;
59 }
60 cout << endl;
61 }
62 int main()
63 {
64 vector<int> A;
65 vector<int> B {1,3,9};
66
67
68 cout << "Incremental Construction:" << endl;
69 print_subset1(A,B);
70 print_rnt();
71 rnt.clear();
72
73
74 cout << "Bit Vector" << endl;
75 print_subset2(A,B);
76 print_rnt();
77 rnt.clear();
78
79
80 cout << "Binary System" << endl;
81 print_subset3(B);
82 print_rnt();
83 rnt.clear();
84
85
86 return 0;
87 }