码迷,mamicode.com
首页 > 其他好文 > 详细

子集生成

时间:2019-05-19 14:31:58      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:sub   efi   生成   fine   long   void   printf   元素   进制   

位向量法:

 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 }

 

子集生成

标签:sub   efi   生成   fine   long   void   printf   元素   进制   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!