假如有一个n个元素的集合,那么它的非空子集有2的次方-1个,而一个n位的二进制数除去0刚好可以表示2的n次方-1种状态。刚好可以建立对应的联系,因此只需要检测二进制数所表示的每一种状态1的位置,把对应位置的角标对应的元素添加到集合中即可(一种状态对应一个集合),最后在把集合添加到容器中便可求出所有的非空子集。
代码实现:
#include<iostream>
#include<set>
#include<vector>
#include<cmath>
using namespace std;
const int MAX=5;
vector<set<int>>all;
int a[MAX