1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
   | #include <stdio.h> #define MaxN 100 //元素的最大值 #define MaxSize 100 //子集的最大值
  typedef struct{ 	int n; //子集我的个数 	int data[MaxSize][MaxN]; //元素 }PsetType;
 
  void copy(int a[], int b[], int n){//将a数组的值复制给b数组 	for(int i=0; i<=n; ++i) 		b[i] = a[i]; }
  void pset(int n, PsetType &p){ 	int a[MaxN]; 	//初始化 	p.data[0][0] = 0; 	p.n = 1; 	//初始化结束 	for(int i=1; i<=n; ++i){ 		int m = p.n; //原幂集中子集的个数 		for(int j=0; j<m; ++j){ 			copy(p.data[j], a, p.data[j][0]); 			a[0]++; //子集元素个数加1 			a[a[0]] = i; 			copy(a, p.data[p.n], a[0]); 			p.n++; 		} 	} }
 
  void disp(PsetType p){ 	for(int i=0; i<p.n; ++i){ 		printf("{"); 		for(int j=1; j<=p.data[i][0];++j){ 		printf("%d",p.data[i][j]); 		} 		printf("}\n"); 	} }
  int main(){ 	PsetType p; 	int n = 5; 	pset(n, p); 	disp(p); 	return 0; }
 
   |