Основните класове в реализацията ми на проблема са Room и PathsTree, като Room се явява най-високият в йерархията клас, а PathsTree е дървото на най-късите пътища от Том до Джери
-
isRealPos - проверява дали дадена позиция е вътре в матрицата
-
isPosOkay - проверява дали дадена позиция е вътре в матрицата и дали клетката на тази позиция е блокирана
-
initRoomNodes - инциализира всички върхове на графа на матрицата
-
clearRoomNodes - освобождава паметта, използвана от върховете на графа на матрицата
-
makeRoomEdges - строи ацикличен ориентиран граф с върхове всички клетки, които не са блокирани; ребрата на получения граф са такива, че ако от произволен връх, искаме да стигнем до Джери, то трябва да вървим само по тези ребра и по никои други; като това ни дава, че за да намерим всички най-кратки пътища от Том до Джери, то трябва да пуснем дфс с преизползване на върхове от Том до Джери, и понеже графът е ацикличен, се получава, че ще се генерират всички най-кратки пътища от Том до Джери, като никога няма да правим излишни стъпи, което ни дава максимално добра сложност, а именно не повече от О(обща дължина на пътищата); този граф се постига, когато се пусне бфс от Джери и се строят ребра от върховете с 1 ниво по-надалеч от някой връх към този връх
-
read - чете конфигурацията на стаята от даден файл
-
dfsMaxPaint - прави "умно" пълно изчерпване на всички възможни пътища чрез дфс, за да намери пътят с най-много разливане на боя и най-малко завои
-
animate - анимира пътят на даден дрон, зададен чрез поредица от команди, в стаята
-
twoDronesMostPaint - намира кофигурация на два дрона, така че да разлеят колкото се може повече боя като го прави по следния начин: взема произволен най-кратък път и пробва с всички останали колко боя могат да разлеят те, ако не разливат където първият е разлял
-
clearTreeNodes - освобождава паметта, използвана от върховете на дървото
-
build - построява дървото на най-кратките с пътища с върхове команди, които се въвеждат в дрона като това дърво се построява чрез направения от makeRoomEdges граф
-
print - печата дървото на най-кратките пътища в .dot формат, готов за ползване от dotty
-
findChosenPath - намира пълна информация за избран път в дървото
-
commonPaht - по дадени два пътя от дървото, намира тяхната обща част
-
numberOfLeaves - намира броя на най-кратките пътища, като това съвпада с броя на листата в дървото
-
findPathWithoutRepetition - при зададени с индекси два най-кратки пътища намира конфигурацията на втория дрон, така че да не разлива боя на места, на които първият дрон ще разлее