C语言【C】位运算求集合的幂集

N个元素的集纳的幂集共有2^N个集合构成的元素。

C语言, 

所谓幂集(Power Set),
就是本集合中持有的子集(包括全集和空集)构成的集族。

脚是用C语言实现之求幂集的代码。最要命襄助元素N <= 31。

 1 #include <stdio.h>
 2 
 3 void Powerset( int a[],int n )/*a[]为所求集合,n为元素的个数*/
 4 {
 5     unsigned int code = 0;
 6     int i;
 7 
 8     for( code = 0; code < (1<<n) ; code++ )
 9     {
10         printf("{ ");
11         for(i=0;i<(1<<n);i++)
12         {
13             if( code&(1<<i) )/*输出code第i位为1的对应元素a[i]*/
14             {
15                 printf("%d ",a[i]);
16             }
17         }
18         printf("}");
19         printf("\n");
20     }
21 }
22 
23 int main()
24 {
25     int a[4] = {1,2,3,4};
26     Powerset(a,4);
27     return 0;
28 }

像集合S = {a,b,c};那么S的幂集P(S) = { Ø ,{a}, {b}, {c}, {a,b}, {a,c},
{b,c}, {a,b,c} }。