非空子集的生成(二进制法)

本文介绍如何通过二进制法生成一个n个元素集合的所有非空子集。利用二进制数的特性,每个非零位对应集合中的一个元素,通过遍历从1到2^n-1的所有整数,可以得到2^n-1个不同的子集。代码实现详述了这一过程。
摘要由CSDN通过智能技术生成

假如有一个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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值