#include #include #include "subset.h" //Initialize the fixed subset iterator void subsetInitSize(Subset* subset, int size, int n){ subset->size = size; subset->n = n; int i=0; for(i=0;ielem[i]=false; } for(;ielem[i]=true; } } //Initialize the subset iterator void subsetInit(Subset* subset,int n){ subset->size = n; subset->n = n; subset->elem = malloc(sizeof(bool)*n); for(int i=0;ielem[i]=true; } void subsetFree(Subset* subset){ free(subset->elem); } bool subsetIterate(Subset* subset){ if(subset->size==0)return false; if(!fixedSizeSubsetIterate(subset)){ subsetInitSize(subset,subset->size-1,subset->n); } return true; } bool fixedSizeSubsetIterate(Subset* subset){ int i=subset->n-1; for(int j=0; jn-subset->size; j++){ for(;subset->elem[i];i--); if(jn-i-1){ int k; subset->elem[i]=true; for(k=i+1;k<=i+1+j;k++) subset->elem[k] = false; for(;kn;k++) subset->elem[k] = true; return true; } i--; } return false; }