增量构造法

#include  
using namespace std; 
int a[20]; 

void print_subset(int n,int* a,int cur){ 
    for (int i=0;i//打印上一个子集 
        cout<' '; 
    cout<int minElem = cur?a[cur-1] + 1 : 0; 
    //找出上一个子集中最大的数将其+1 
    // if(0 == cur)
        //minElem = 0;
    //else
        //minElem = a[cur - 1]; 


    for (int i=minElem;i//这个数成为下一个循环中最大的数将排在下一个子集的最后  (按字典顺序输出) 
        print_subset(n,a,cur+1); 
    } 
} 

int main(){ 
    int n ; 
    while (cin>>n,n){ 
        print_subset(n,a,0); 
    } 
} 

你可能感兴趣的:(子集生成)