#include #include #include #include typedef struct { bool* elem;//Says if borrel i is part of the subset int size;//Amount of borrels that are part of the subset int n; }Subset; typedef struct Obligations{ int r;//Start of interval int d;//End of interval int p;//Time slots required by the obligation }Obligation; void parser(int* t, int* m, int** b, int* n, Obligation*** I, int** nI); void stringify(int att,int m, int*s, int n, Subset** whenObligation, Obligation** I, int* nI){ for(int h=0;hn;h++) // if(borrelSubset->elem[h]) // for(int j=s[h];jsize = size; subset->n = n; int i=0; for(i=0;ielem[i]=false; } for(;ielem[i]=true; } } bool subsetIterate(Subset* subset); void subsetInit(Subset* subset,int n); void main(){ int t,m,n; int* b; int* nI; Obligation** I; parser(&t,&m,&b,&n,&I,&nI); //Subset set; //bool elems[] = {true,true,true,true}; //set.elem = elems; //set.size=4; //set.n=4; //printf("{%d,%d,%d,%d}\n",set.elem[0],set.elem[1],set.elem[2],set.elem[3]); //while(subsetIterate(&set)){ // printf("{%d,%d,%d,%d}\n",set.elem[0],set.elem[1],set.elem[2],set.elem[3]); //} ////set.n=2; ////printf("%d\n",borrelSubsetCanAttend(t,&set,b,s,I[0],nI[0])); //Subset att[n]; int s[m]; Subset** whenObligation; whenObligation = malloc(sizeof(Subset*)*n); for(int i=0;isize = n; subset->n = n; subset->elem = malloc(sizeof(bool)*n); for(int i=0;ielem[i]=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; } 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 iterationCombinator(/*list of functions*/iterators,int n ,/*datatype*/x){ // for(int i=0;in;h++) if(borrelSubset->elem[h]) for(int i=s[h];i=0: Amount of students that can attend the borrels in the optimum solution int borrel(int t, int m, int* b, int n, int* s_opt,Subset** whenObligation, Obligation** I, int* nI){ //Checks if the borrel lengths are smaller than //the amount of time slots int*s=malloc(sizeof(int)*m); for(int h=0;ht)return(-1); } int maxAttendance = -1; //Initially makes all borrels start at zero memset(s,0,sizeof(int)*m); do{ int attendance = 0; for(int i=0;imaxAttendanceForStudent){ maxAttendanceForStudent = borrelSubs.size; for(int j=0;j