首页 > 其他 > 详细

子集生成

时间:2019-05-19 13:20:00      阅读:84      评论:0      收藏:0      [点我收藏+]

位向量法:

 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 }

 

子集生成

原文:https://www.cnblogs.com/zuiaimiusi/p/10888783.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!