zoukankan      html  css  js  c++  java
  • 【C】位运算求集合的幂集

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

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

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

    下面是利用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("
    ");
    20     }
    21 }
    22 
    23 int main()
    24 {
    25     int a[4] = {1,2,3,4};
    26     Powerset(a,4);
    27     return 0;
    28 }
  • 相关阅读:
    中海洋朗讯杯比赛总结[2014年12月]
    青理工ACM比赛总结和反思[2014年11月]
    程序员技术练级攻略
    一天能学会的计算机技术
    UVa 1597
    回滚机制
    超时和重试机制
    降级特技
    限流详解
    隔离术
  • 原文地址:https://www.cnblogs.com/yongjiuzhizhen/p/4310712.html
Copyright © 2011-2022 走看看