void Carquois::semiDestroy() { int i; if(semifree==0) { getNbVoisinsMax(); // Penser à faire ça... sinon... genScore(); estConnexe(); semifree=1; for(i=0;i<this->n;i++) free((this->M)[i]); free(this->M); } }
int main(int argc, char *argv[]) { /* Save start time of program for later use */ const time_t startTime = time(NULL); srand(startTime); /* Create pointers to manipulate with */ Firm * firm = (Firm *) calloc(1, sizeof(Firm)); Employee* employees = NULL; Employee ** sortedEmployes; /* Loads data from the file in the correct file in the correct directory */ char runPath[strlen(argv[0]) + 20]; getRunPath(argv[0], runPath); loadDataFromFile(firm, &employees, runPath); sortedEmployes = sortEmployeesBy(employees, firm->skills); int validCounter = 0; int randomCounter; float highestScore = 0; firm->bestSchedule = generateBestRandomSchedule(firm, employees, sortedEmployes, &randomCounter, &validCounter); if(!firm->bestSchedule) { printf("Error, no result from random generation\n"); exit(-1); } highestScore = genScore(firm, firm->bestSchedule, employees); //int swapsTries; /** * findBestRoughSwap */ firm->bestSchedule = findBestRoughSwap(firm, firm->bestSchedule, employees, &highestScore); /** * fineSwap */ findBestFineSwap(firm, &(firm->bestSchedule), employees, &highestScore); Shift * tmpShift = listCopy((void*) firm->bestSchedule, sizeof(Shift)); Employee * unassignedEmployeeList = generateUnassignedEmployeeList(tmpShift, employees); assignEmployeeListRandomly(tmpShift, employees, &unassignedEmployeeList); tmpShift = findBestRoughSwap(firm, tmpShift, employees, &highestScore); findBestFineSwap(firm, &tmpShift, employees, &highestScore); if(isValid(tmpShift, employees) && genScore(firm, firm->bestSchedule, employees) < highestScore) { listClean((void **) &(firm->bestSchedule), sizeof(Shift)); firm->bestSchedule = tmpShift; } else { listClean((void **) &tmpShift, sizeof(Shift)); } printHLine(129); printf("PRINTING BEST SCHEDULE (THAT I FOUND) - BY THE WAY, THE BEST SCORE WAS: %f\n", highestScore); printHLine(129); if(printScheduleHeadline("")) { printSchedule(firm->bestSchedule, employees); } printHLine(129); /** * TODO: Clean bedstscore osv. */ cleanUp(&firm, &employees, &sortedEmployes); return EXIT_SUCCESS; }