Q8.3

#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值