#include #include #include #include #include #include "subset.h" #include "input.h" #include "output.h" //Declaration of all functions bool borrelSubsetCanAttend(int t,Subset* borrelSubset,int* b,int* s,Obligation *obligations,int n,Subset* whenObligation); bool borrelIterate(int t,int m,int* b,int* s); bool obligationoverlap(int t, Subset* whenObligation,int n,Obligation* obligations,bool* borrelAtTime); bool borrelSubsetCanAttend(int t,Subset* borrelSubset,int* b,int* s,Obligation *obligations,int n,Subset* whenObligation); bool borrelIterate(int t,int m,int* b,int* s); Output borrel(Input* in); void main(){ Input in = parser(); double start,end; start = (double)clock()/(double)CLOCKS_PER_SEC; if(!isFeasible(&in)){ printf("The given input is infeasible\n"); return; } Output out = borrel(&in); end = (double)clock()/(double)CLOCKS_PER_SEC; printOutput(&in,&out); double time_taken = (double)(end - start); printf("The algorithm took %f seconds.\n", time_taken); } //Check if there is an overlap in the schedule bool obligationoverlap(int t, Subset* whenObligation,int n,Obligation* obligations,bool* borrelAtTime){ bool obligationAtTime[t]; for(int i=0;in;h++) if(borrelSubset->elem[h]) for(int i=s[h];iin; out->maxTotAtt =0; for(int i=0;in;i++){ Subset borrelSubs; subsetInit(&borrelSubs,in->m); int maxAttendanceForStudent = 0; do{ Subset whenObligationTmp[in->nI[i]]; for(int j=0;jnI[i];j++){ subsetInit(whenObligationTmp+j, in->I[i][j].d-in->I[i][j].r+1); } if(!borrelSubsetCanAttend(in->t,&(borrelSubs),in->b,out->s,in->I[i],in->nI[i],whenObligationTmp)) continue; if(borrelSubs.size>maxAttendanceForStudent){ maxAttendanceForStudent = borrelSubs.size; for(int j=0;jnI[i];j++){ out->obl[i][j] = whenObligationTmp[j]; } } }while(subsetIterate(&(borrelSubs))); out->maxTotAtt+=maxAttendanceForStudent; } } Output borrel(Input* in){ Output out = initOutput(in); Output ret = initOutput(in); do{ updateAttendance(&out); if(ret.maxTotAttt,in->m,in->b,out.s)); return ret; }