1 //子集生成算法:给定一个集合,枚举所有可能的子集。 2 //为了简单起见,讨论的方法中没有重复元素 3 4 //增量构造法 5 #include<cstdio> 6 #include<cmath> 7 void print_subset(int n,int* A,int cur) 8 { 9 for(int i = 0 ; i < cur; ++i) printf("%d",A[i]); 10 printf("\n"); 11 int s = cur ? A[cur-1]+1 : 0; //确定当前元素的最小可能值、 12 for(int i = s; i < n; ++i){ 13 A[cur]=i; 14 print_subset(n,A,cur+1); //递归构造子集、 15 } 16 } 17 int main() 18 { 19 int A[10],n; //这种方法只适合求从0~n-1的连续整数的子集 20 scanf("%d",&n); 21 for(int i=0;i<n;++i) 22 scanf("%d",&A[i]); 23 print_subset(n,A,0); 24 }
时间: 2024-12-28 00:49:42