#include <iostream>
#include <vector>
using namespace std;
vector<int> subset;
vector<vector<int> > subsets;
vector<vector<int> > getsub(int a[], int len) // from 00.. to 11..
{
int m = 1 << len;
int j, cnt;
vector<vector<int> > vs;
for(int i = 0; i < m; ++i)
{
vector<int> v;
j = i;
cnt = 0;
while(j > 0)
{
if(j & 1)
{
v.push_back(a[cnt]);
}
j >>= 1;
cnt++;
}
vs.push_back(v);
}
return vs;
}
//递归!!!!!!!!!!!!!!!!!!
vector<vector<int> > getsub2(int a[], int n)
{
vector<vector<int> > rev;
if(n < 0)
{
vector<int> v;
rev.push_back(v);
}
else
{
vector<vector<int> > subrev = getsub2(a, n - 1);
for(int i = 0; i < subrev.size(); ++i)
{
vector<int> v = subrev[i];
rev.push_back(v);
v.push_back(a[n]);
rev.push_back(v);
}
}
return rev;
}
void print(vector<vector<int> > &vs)
{
vector<int> v;
vector<vector<int> >::iterator iter1;
vector<int>::iterator iter2;
for(iter1 = vs.begin(); iter1 != vs.end(); ++iter1)
{
v = *iter1;
for(iter2 = v.begin(); iter2 != v.end(); ++iter2)
{
cout << *iter2 << " ";
}
cout << endl;
}
}
void print1(vector<vector<int> > &vs)
{
for(int i = 0; i < vs.size(); ++i)
{
vector<int> v = vs[i];
for(int j = 0; j < v.size(); ++j)
{
cout << v[j] << " ";
}
cout << endl;
}
}
int main(void)
{
int a[] = {
1, 2, 3, 4
};
int len = sizeof(a) / sizeof(int);
// vector<vector<int> > sub = getsub(a, len);
vector<vector<int> > sub = getsub2(a, len - 1);
print(sub);
return 0;
}
Q8.3
最新推荐文章于 2024-08-12 01:12:02 发布