ОСНОВНА ДОКУМЕНТАЦИЯ НА ПРОЕКТ "ТОМ И ДЖЕРИ" ОТ КУРСА СДП ВЪВ ФМИ

Основните класове в реализацията ми на проблема са Room и PathsTree, като Room се явява най-високият в йерархията клас, а PathsTree е дървото на най-късите пътища от Том до Джери

Основни функции в Rooms

  • isRealPos - проверява дали дадена позиция е вътре в матрицата

  • isPosOkay - проверява дали дадена позиция е вътре в матрицата и дали клетката на тази позиция е блокирана

  • initRoomNodes - инциализира всички върхове на графа на матрицата

  • clearRoomNodes - освобождава паметта, използвана от върховете на графа на матрицата

  • makeRoomEdges - строи ацикличен ориентиран граф с върхове всички клетки, които не са блокирани; ребрата на получения граф са такива, че ако от произволен връх, искаме да стигнем до Джери, то трябва да вървим само по тези ребра и по никои други; като това ни дава, че за да намерим всички най-кратки пътища от Том до Джери, то трябва да пуснем дфс с преизползване на върхове от Том до Джери, и понеже графът е ацикличен, се получава, че ще се генерират всички най-кратки пътища от Том до Джери, като никога няма да правим излишни стъпи, което ни дава максимално добра сложност, а именно не повече от О(обща дължина на пътищата); този граф се постига, когато се пусне бфс от Джери и се строят ребра от върховете с 1 ниво по-надалеч от някой връх към този връх

  • read - чете конфигурацията на стаята от даден файл

  • dfsMaxPaint - прави "умно" пълно изчерпване на всички възможни пътища чрез дфс, за да намери пътят с най-много разливане на боя и най-малко завои

  • animate - анимира пътят на даден дрон, зададен чрез поредица от команди, в стаята

  • twoDronesMostPaint - намира кофигурация на два дрона, така че да разлеят колкото се може повече боя като го прави по следния начин: взема произволен най-кратък път и пробва с всички останали колко боя могат да разлеят те, ако не разливат където първият е разлял

Основни функции в PathsTree, класът за дърво на най-кратки пътища

  • clearTreeNodes - освобождава паметта, използвана от върховете на дървото

  • build - построява дървото на най-кратките с пътища с върхове команди, които се въвеждат в дрона като това дърво се построява чрез направения от makeRoomEdges граф

  • print - печата дървото на най-кратките пътища в .dot формат, готов за ползване от dotty

  • findChosenPath - намира пълна информация за избран път в дървото

  • commonPaht - по дадени два пътя от дървото, намира тяхната обща част

  • numberOfLeaves - намира броя на най-кратките пътища, като това съвпада с броя на листата в дървото

  • findPathWithoutRepetition - при зададени с индекси два най-кратки пътища намира конфигурацията на втория дрон, така че да не разлива боя на места, на които първият дрон ще разлее