- #include<iostream>
- using namespace std;
- const int N=5;
- unsigned int n=0;
- int A[N]={1,2,3,4,5};
- int T[N];
- int main(){
- void PrintSubset(int m);
- for(int i=0;i<N;i++)T[N]=-1;
- PrintSubset(0);
- return 0;
- }
- void PrintSubset(int m){
- if(m>=N){
- cout<<"{ ";
- for(int i=0;i<N;i++)
- if(T[i]!=-1)cout<<T[i]<<" ";
- cout<<"}"<<endl;
- return ;
- }
- else{
- T[n++]=A[m];
- PrintSubset(m+1);
- T[--n]=-1;
- PrintSubset(m+1);
- }
- }
- /********************************/
- //上网搜到一个比较新颖的算法,采用遍历二叉树的原理
- #include <stdio.h>
- #include <string.h>
- #define MAX_LENGTH 100 /*集合的最大元素个数*/
- void PowerSet(char*, int, char*,int *);
- int main()
- {
- char a[MAX_LENGTH]; /*存储输入的集合*/
- char set[MAX_LENGTH]={"/0"}; /*储存集合的幂集元素*/
- int NumOfPowerSet=0; /*幂集元素记数*/
- printf("Input the elements:");
- scanf("%s",a);
- printf("----------------------------/n");
- PowerSet(a,0,set,&NumOfPowerSet); /*调用递归函数*/
- printf("----------------------------/n");
- printf("Number of PowerSet: %d/n",NumOfPowerSet);
- return 1;
- }
- /*
- 34 参数说明: char* a : 待求幂集的集合
- 35 int i : 当前分析到集合的第i个元素
- 36 char* set : 存储当前幂集元素状态
- 37 int* Num : 幂集元素记数
- 38 */
- void PowerSet(char* a, int i, char* set, int * Num)
- {
- char TempSet[MAX_LENGTH];
- strcpy(TempSet,set);
- if(i>=strlen(a))
- {
- printf("{%s}/n",set);
- (*Num)++;
- }
- else
- {
- PowerSet(a,i+1,TempSet,Num);
- strncat(TempSet,(a+i),1);
- PowerSet(a,i+1,TempSet,Num);
- }
- }
求子集问题
最新推荐文章于 2023-10-31 21:03:17 发布