子集生成

Posted zuiaimiusi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了子集生成相关的知识,希望对你有一定的参考价值。

位向量法:

 1 #include<bits/stdc++.h>
 2 #define LL long long
 3 #define maxn 1005
 4 using namespace std;
 5 int n;
 6 int B[maxn];
 7 void print_subset(int n,int B[],int cur)
 8 {
 9     if(cur==n+1)
10     {
11         for(int i=0;i<cur;i++)
12         if(B[i])printf("%d ",i);
13         printf("\n");
14         return;
15     }
16     B[cur]=1;//选第cur个元素
17     print_subset(n,B,cur+1);
18     B[cur]=0;//不选第cur个元素
19     print_subset(n,B,cur+1);
20 }
21 int main()
22 {
23     scanf("%d",&n);
24     print_subset(n,B,1);
25     return 0;
26 }

 

 

 

二进制法:

 1 #include<bits/stdc++.h>
 2 #define LL long long
 3 #define maxn 1005
 4 using namespace std;
 5 int n;
 6 void print_subset(int n,int s)
 7 {
 8     for(int i=0;i<n;i++)//这里注意,i从0开始取,2^0=1,最大取到n-1,代表最大可以在n-1上取1。
 9         if(s&(1<<i))printf("%d ",i);//按位取,如果是1则输出
10     printf("\n");
11 }
12 int main()
13 {
14     scanf("%d",&n);
15     for(int i=1;i<=(1<<n);i++)//生成1~2^n种不同的可能
16     {
17         print_subset(n,i);
18     }
19     return 0;
20 }

 

以上是关于子集生成的主要内容,如果未能解决你的问题,请参考以下文章

postman 自动生成 curl 代码片段

子集生成算法

模板子集生成 二进制法

如何生成计数器的所有子集?

Python生成列表的所有子集

为表的子集生成序列