#include<iostream>
#include<vector>
using namespace std;
template<class T>
class Subset
{
public:
void Input(void); //输入集合A中的元素,存放在vecA中
void PowerSet(unsigned int i); //对集合A求子集
void Output(vector<T> vec); //输出子集元素
private:
vector<T> vecA; //A中元素
vector<T> vecB; //A的子集集合中一个元素
};//Subset
template<class T>
void Subset<T>::Input(void)
{
T a;
cout<<"以65535结束集合A中元素的输入"<<endl;
while(cin>>a&&a!=65535)
{
vecA.push_back(a); //将元素入栈
}//while
cout<<endl;
}//Subset
template<class T>
void Subset<T>::PowerSet(unsigned int i)
{
if(i>=vecA.size())
Output(vecB);
else
{
T x=vecA[i];i++; //获取栈中元素
vecB.push_back(x); //取栈中元素
PowerSet(i);
; //舍栈中元素,即将元素不插入到vec中,以;代替
PowerSet(i);
}//else
}//PowerSet
template<class T>
void Subset<T>::Output(vector<T> vec)
{
vecto
回溯法——集合求子集
最新推荐文章于 2022-04-16 18:33:18 发布