diff --git a/PA04-0927/Makefile b/PA04-0927/Makefile index 701a366..7e72b2e 100644 --- a/PA04-0927/Makefile +++ b/PA04-0927/Makefile @@ -1,6 +1,6 @@ CC = gcc -Wall -SOURCES = PA04_Main.c StateUtilities_LogN.c Console_IO_Utility.c File_Input_Utility.c File_Output_Utility.c -OBJECTS = PA04_Main.o StateUtilities_LogN.o Console_IO_Utility.o File_Input_Utility.o File_Output_Utility.o +SOURCES = PA04_Main.c BasicUtilities.c RoomUtilities.c CourseUtilities.c Console_IO_Utility.c File_Input_Utility.c File_Output_Utility.c +OBJECTS = PA04_Main.o BasicUtilities.o RoomUtilities.o CourseUtilities.o Console_IO_Utility.o File_Input_Utility.o File_Output_Utility.o all: PA04_Main diff --git a/PA04-0927/PA04_Main b/PA04-0927/PA04_Main new file mode 100755 index 0000000..ff60b6b Binary files /dev/null and b/PA04-0927/PA04_Main differ diff --git a/PA04-0927/PA04_Main.c b/PA04-0927/PA04_Main.c index b22a99b..5e0c447 100644 --- a/PA04-0927/PA04_Main.c +++ b/PA04-0927/PA04_Main.c @@ -31,7 +31,7 @@ int main( int argc, char **argv ) rooms = createRoomArray( MAX_NUM_ROOMS ); courses = createCourseArray( MAX_NUM_COURSES ); - if( uploadData( "in_1.txt", courses, rooms ) ) + if( uploadData( "InputFiles/in_6.txt", courses, rooms ) ) { printf( "Start Solution Search\n" ); @@ -87,9 +87,70 @@ Dependencies: available tools as needed bool fitClassRooms( CourseArrayType *courses, RoomArrayType *rooms, int roomLevel, bool verboseFlag ) { - // TODO: Create recursive backtracking function - // to find correct assignment of specified courses to available c Rooms - + int arrayIterator; + RoomDataType tempClassRoom; + CourseDataType tempCourse; + char buildingString[STD_STR_LEN]; + char courseString[STD_STR_LEN]; + // If all courses have been placed + // return true + if(roomLevel == rooms->size) + { + return true; + } + // setup for current classroom + deepCopyRoom(&tempClassRoom, rooms->array[roomLevel]); + deepCopyCourse(&tempCourse, courses->array[roomLevel]); + setRoomDataString(buildingString, tempClassRoom); + if(verboseFlag) + { + printf("\nRecursion Level %d: Seeking a fit for %s\n", roomLevel, buildingString); + } + for(arrayIterator = 0; arrayIterator < courses->size; arrayIterator++) + { + if(verboseFlag) + { + printSpaces(2); + } + // For Loop (Increments through courses) + if(courses->array[arrayIterator].available && + tempClassRoom.roomCapacity > courses->array[arrayIterator].size) + { + // Test to find classroom + // If open and less than course size + // Set classroom associated index to course + rooms->array[roomLevel].associatedIndex = arrayIterator; + // Set course as unavailable + courses->array[arrayIterator].available = false; + setCourseDataString(courseString, courses->array[arrayIterator]); + if(verboseFlag) + { + printSpaces(2); + printf("Trying Course Name: %s, Course Size: %d - Success!\n", courses->array[arrayIterator].courseName, courses->array[arrayIterator].size); + printSpaces(6); + printf("Course Name: %s, Course Size: %d will fit in %s\n", tempCourse.courseName, tempCourse.size, buildingString); + } + // Call and check next recursion + if(fitClassRooms(courses, rooms, roomLevel + 1, verboseFlag)) + { + return true; + } + // Unset classroom associated index to course + tempClassRoom.associatedIndex = NO_CLASS; + // Set course as available + courses->array[arrayIterator].available = true; + } + if(verboseFlag) + { + printf(" Trying Course Name: %s, Course Size: %d - Failed!\n", courses->array[arrayIterator].courseName, courses->array[arrayIterator].size); + } + // end for loop + } + if(verboseFlag) + { + printf("\nCourse Name: %s, Course Size: %d - recursion fell back to Recursion Level %d\n", tempCourse.courseName, tempCourse.size, roomLevel - 1); + printSpaces(2); + } return false; } diff --git a/PA04-0927/build/Debug/outDebug b/PA04-0927/build/Debug/outDebug new file mode 100755 index 0000000..ba69fec Binary files /dev/null and b/PA04-0927/build/Debug/outDebug differ