已知一个集合A,求解幂集B,即A的所有子集,包括空集
方法:回溯法,每次取集合中的一个元素或舍弃该元素
#include<iostream>
#include<list>
using namespace std;
typedef list<int> set;
/**输出集合元素*/
void put_list(set A)
{
set::iterator p;
for(p=A.begin();p!=A.end();++p)
cout<<*p<<" ";
cout<<endl;
}
/*获取集合某一位置的元素*/
void GetElem(set A, int i, int &x)
{
set::iterator p=A.begin();
int j=1;
while(j<i)
{
p++;
j++;
}
x=*p;
}
/*用回溯法求解幂集*/
void getPowerSet(int i,set A, set &B) //幂集
{
int x;
if(i>A.size()) put_list(B);
else
{
GetElem(A,i,x); //将A[i]赋给x
B.push_back(x);
getPowerSet(i+1,A,B);
B.pop_back();
getPowerSet(i+1,A,B);
}
}
int main()
{
set A,B;
int n,elem;
cout<<"源集合A元素个数:";
cin>>n;
cout<<"输入集合A的元素:";
while(n--)
{
cin>>elem;
A.push_back(elem);
}
getPowerSet(1,A,B);
// put_list(A);
return 0;
}