#include #include #include "subset.h" 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; } } 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); //subset->size--; //int i; //for(i=0;in-subset->size;i++){ // subset->elem[i]=false; //} //for(;in;i++){ // subset->elem[i]=true; //} } 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; }