ОПИСАНИЕ ЗАДАЧИ И ВЫБРАННЫХ ПАТТЕРНОВ Цель работы — разработать систему поиска пути в лабиринте с использованием оопп и паттернов проектирования. В работе были использованы следующие паттерны: Strategy — для реализации алгоритмов поиска пути (BFS, DFS, A*, Dijkstra). Позволяет менять алгоритм без изменения кода основного класса MazeSolver. Builder — для создания лабиринта из текстового файла. Отделяет логику загрузки данных от основной системы. '''mermaid classDiagram class Cell { +x +y +is_wall +is_start +is_exit +weight +isPassable() } class Maze { +width +height +start +exit +getCell() +getNeighbors() +getWeightedNeighbors() } class MazeBuilder { +buildFromFile() } class TextFileMazeBuilder MazeBuilder <|-- TextFileMazeBuilder class PathFindingStrategy { +findPath() } class BFSStrategy class DFSStrategy class AStarStrategy class DijkstraStrategy PathFindingStrategy <|-- BFSStrategy PathFindingStrategy <|-- DFSStrategy PathFindingStrategy <|-- AStarStrategy PathFindingStrategy <|-- DijkstraStrategy class MazeSolver { +setStrategy() +solve() } MazeSolver --> PathFindingStrategy Maze --> Cell ''' ЛИСТИНГИ КЛЮЧЕВЫХ КЛАССОВ В проекте реализованы основные классы: Cell — хранение информации о клетке лабиринта Maze — структура лабиринта и работа с соседями MazeSolver — запуск поиска пути PathFindingStrategy — интерфейс алгоритмов BFSStrategy, DFSStrategy, AStarStrategy, DijkstraStrategy — реализации алгоритмов TextFileMazeBuilder — загрузка лабиринта из файла SearchStats — хранение статистики РЕЗУЛЬТАТЫ ЭКСПЕРИМЕНТОВ Алгоритмы тестировались на разных лабиринтах: small, medium, large, empty, no_exit. Сравнивались: время выполнения количество посещённых клеток длина найденного пути Результаты в общем виде: BFS — гарантирует кратчайший путь, но посещает много клеток DFS — быстрый, но не гарантирует оптимальный путь A* — самый быстрый в большинстве случаев за счёт эвристики Dijkstra — стабильный, но медленнее A* на больших лабиринтах АНАЛИЗ ЭФФЕКТИВНОСТИ И ПАТТЕРНОВ Результаты показали, что A* является наиболее эффективным алгоритмом на больших данных, так как использует эвристику и уменьшает количество проверяемых клеток. BFS всегда находит оптимальный путь, но работает медленнее из-за полного обхода пространства. DFS быстрее по времени, но не гарантирует лучший результат. Dijkstra корректно работает с весами, но в данной задаче часто уступает A*. Паттерн Strategy позволил легко переключать алгоритмы без изменения основной логики программы. Паттерн Builder упростил создание лабиринтов и отделил загрузку данных от логики поиска. ВЫВОДЫ В ходе работы была создана гибкая система поиска пути в лабиринте с использованием ООП и паттернов проектирования. Благодаря Strategy алгоритмы стали независимыми и легко заменяемыми. Благодаря Builder упростилась работа с созданием и загрузкой лабиринтов. В целом, архитектура получилась расширяемой: можно легко добавить новый алгоритм или тип лабиринта без переписывания существующего кода. Таким образом, наиболее сбалансированным алгоритмом для поиска пути в лабиринте является A*, так как он обеспечивает: высокую скорость работы, оптимальность результата, минимальное количество исследуемых состояний. Алгоритмы BFS и Dijkstra гарантируют оптимальность, но проигрывают по производительности, а DFS является самым быстрым, но не гарантирует качество решения.