题目
求一个集合的所有幂集
题目:要求求n个元素的集合的幂集!
假设这里有三个元素:A={1,2,3},那么集合A的幂集?
ρ(A)={ {1,2,3},{1,2},{1,3},{1},{2,3},{2},{3},Φ}
算法思路:
采用回溯法的思想
将每一个过程,当作取或者舍的过程
算法描述
void Powerset(int i,int n){
//初始调用:Powerset(1,n)
if(i>n){
输出幂集的其中一个元素
}else{
取第i个元素
Powerset(i+1,n);
舍第i个元素
Powerset(i+1,n);
}
}
代码
// 求n个元素的集合的幂集
#include <iostream>
using namespace std;
#define MAX 100
int set[MAX]; //表示集合
int auxset[MAX]; //辅助数组,表示取和舍的过程
void init(int n){
//初始化集合和辅助队列
for(int i=1;i<=n;i++){
set[i]=0;
auxset[i]=0;
}
}
//输出一个结果
void output(int n){
cout<<"{";
for(int i=1;i<=n;i++){
cout<<auxset[i]<<" ";
}
cout<<"}"<<endl;
}
/**
* 算法主体
**/
void Powerset(int i,int n){
if(i>n){
output(n);//当前i-1个即n个已经取舍完毕,就输出一个结果
}
else{
//取
auxset[i]=set[i];
Powerset(i+1,n);
//舍
auxset[i]=0;
Powerset(i+1,n);
}
}
int main() {
init(2);
for(int i=1;i<=2;i++){
cin>>set[i];
}
Powerset(1,2);
return 0;
}