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; }
|