示例#1
0
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);
    }
}
示例#2
0
文件: main.c 项目: feupeu/P1-projekt
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;
}