二进制法枚举子集
通过转换为二进制来查找是否存在子集。其中&的结果是2个集合的子集,| 表示2个子集的并集,^ 表示2个集合中不同元素的集合
#include<cstdio> using namespace std; void print_subset(int n,int s) { for(int i=0; i<n; i++) if(s&(1<<i)) printf("%d ",i);///s&(1<<i),表示s与1左移i位的所形成的二进制数有没有交集 printf("\n"); } int main() { int n; while(~scanf("%d",&n)) { for(int i=0; i<(1<<n); i++) print_subset(n,i); } return 0; }