求子集问题

  1. #include<iostream>
  2. using namespace std;
  3. const int N=5;
  4. unsigned int n=0;
  5. int A[N]={1,2,3,4,5};
  6. int T[N];
  7. int main(){
  8.  void PrintSubset(int m);
  9.     for(int i=0;i<N;i++)T[N]=-1;
  10.  PrintSubset(0);
  11.  return 0;
  12. }
  13. void PrintSubset(int m){
  14.  if(m>=N){
  15.   cout<<"{ ";
  16.   for(int i=0;i<N;i++)
  17.    if(T[i]!=-1)cout<<T[i]<<" ";
  18.   cout<<"}"<<endl;
  19.   return ;
  20.  }
  21.  else{
  22.         T[n++]=A[m];
  23.   PrintSubset(m+1);
  24.   T[--n]=-1;
  25.   PrintSubset(m+1);
  26.  }
  27. }
  28.  /********************************/
  29. //上网搜到一个比较新颖的算法,采用遍历二叉树的原理
  30.  #include <stdio.h>
  31.     #include <string.h>
  32.   
  33.     #define MAX_LENGTH 100 /*集合的最大元素个数*/
  34.    
  35.     void PowerSet(char*, intchar*,int *);
  36.    
  37.     int main()
  38.    {
  39.             char a[MAX_LENGTH];                /*存储输入的集合*/
  40.             char set[MAX_LENGTH]={"/0"};        /*储存集合的幂集元素*/
  41.             int NumOfPowerSet=0;                /*幂集元素记数*/
  42.   
  43.             printf("Input the elements:");
  44.             scanf("%s",a);
  45.  
  46.            printf("----------------------------/n");
  47.            PowerSet(a,0,set,&NumOfPowerSet); /*调用递归函数*/
  48.            printf("----------------------------/n");
  49.   
  50.           printf("Number of PowerSet: %d/n",NumOfPowerSet);
  51.    
  52.             return 1;
  53.     }
  54.   
  55.    /*
  56. 34            参数说明:                 char* a :        待求幂集的集合
  57. 35                             int i :        当前分析到集合的第i个元素
  58. 36                          char* set :        存储当前幂集元素状态
  59. 37                           int* Num :        幂集元素记数
  60. 38    */
  61.     void PowerSet(char* a, int i, char* set, int * Num)
  62.     {
  63.             char TempSet[MAX_LENGTH];
  64.    
  65.            strcpy(TempSet,set);
  66.            if(i>=strlen(a))
  67.             {
  68.                     printf("{%s}/n",set);
  69.                    (*Num)++;
  70.             }
  71.             else
  72.            {
  73.                     PowerSet(a,i+1,TempSet,Num);
  74.                     strncat(TempSet,(a+i),1);
  75.                     PowerSet(a,i+1,TempSet,Num);
  76.             }
  77.     }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值