CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  专题开发/技术/项目 >  数据结构与算法

求生成所有子集的算法

楼主caocao123(大英雄曹操)2004-05-01 19:44:15 在 专题开发/技术/项目 / 数据结构与算法 提问

比如:{a,   b,   c}  
   
  子集是:  
    {a,   b,   c}  
    {a,   b}  
    {a,   c}  
    {a   }  
    {b,   c}  
    {b   }  
    {c   }  
    {   }       //空集  
   
  问题点数:100、回复次数:5Top

1 楼gudfen(帝波微)回复于 2004-05-01 20:57:28 得分 25

#include   <stdio.h>  
  #define   MAX   10  
  void   printPowerSet(int   n,   int   post[],   int   num)   {  
    if(n   ==   0)   {  
      int   i;  
      printf("{");  
      for(i   =   num-1;   i   >=   0;   i--)  
        printf("%d   ",   post[i]);  
      printf("}\n");  
      return;  
    }  
    printPowerSet(n-1,   post,   num);  
    post[num]   =   n;  
    num++;  
    printPowerSet(n-1,   post,   num);  
  }  
  void   main()   {  
    int   n,   post[MAX];  
    printf("n=?(1-5)");  
    scanf("%d",   &n);  
    printPowerSet(n,   post,   0);  
  }  
   
  Top

2 楼theoldman(跛脚老人)回复于 2004-05-01 22:37:10 得分 25

//   非递归实现  
  #include   "string.h"  
  #include   "iostream.h"  
  void   main()  
  {  
  char   *str   =   "abcd"   ;  
  cout   <<   "the   set   is   :   {"   <<   str   <<"}"<<   endl   <<   endl   ;  
  unsigned   i,j,cover,count,display   ;  
   
  unsigned   length   =   strlen(str)   ;  
   
  if(length>8*sizeof(display))   return   ;  
   
  count   =   1   <<   length   ;  
  cout   <<   "{}"   <<   endl;  
  for(cover=display=i=1;i<count;i++)  
  {  
  cover   =   1   ;  
  cout   <<   "{"   ;  
  for(j=0;   j<length;   j++)  
  {  
  if(display&cover)  
  {  
  cout   <<   str[j]   ;  
  }  
  cover   =   cover   <<   1   ;  
  }  
  cout   <<   "}"   ;  
  cout   <<   endl   ;  
   
  ++display   ;  
  }  
  }Top

3 楼mmmcd(超超)回复于 2004-05-01 22:57:53 得分 25

http://expert.csdn.net/Expert/topic/2902/2902133.xml?temp=.7710077Top

4 楼liem(阿明)回复于 2004-05-02 17:59:26 得分 24

如果一个集合的个数不多(比如<16),那么可以用一个子集对应一个整数来做。  
  以{a,b,c}为例,其子集{a,b}对应二进制110,{b,c}对应二进制011,因此只要做一个循环:  
  for(int   i=0;i<8;i++)  
  将i分解成二进制数,再输出对应的元素就可以了。Top

5 楼WYlslrt(WY.lslrt(http://www.wyos.net))回复于 2004-05-04 11:08:25 得分 1

这么简单的问题要等我有键盘了再结帖!  
  我现在用鼠标点虚拟键盘,累死了!Top

相关问题

  • 求子集算法
  • 求出一个整数组成的集合的所有子集的算法
  • 请教关于求子集的算法
  • 求生成随机数的算法
  • 求生成全排列的算法
  • 求生成缩略图的算法
  • 用java做一个“求集合子集的”算法。
  • ( winform ) 集合A是集合B的子集,C#什么算法可以求出 B-A ???
  • 求生成不重复的任意15位字符串的算法
  • 怎样生成一个集合的所有子集?

关键词

  • printpowerset
  • post
  • num
  • printf
  • include

得分解答快速导航

  • 帖主:caocao123
  • gudfen
  • theoldman
  • mmmcd
  • liem
  • WYlslrt

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo