Отчет по лабораторной работе: Поиск выхода из лабиринта 1\. Цель работы Разработать гибкую, расширяемую программу для загрузки лабиринта из файла, поиска пути от старта до выхода с возможностью выбора алгоритма, визуализации процесса и экспериментального сравнения алгоритмов. 2\. Использованные паттерны проектирования 2.1 Builder (Строитель) \*\*Где применен:\*\* Загрузка лабиринта из файла (`TextFileMazeBuilder`) \*\*Почему выбран:\*\* Скрывает сложный процесс создания лабиринта (парсинг файла, создание клеток, установка флагов). Позволяет легко добавить новые форматы файлов. 2.2 Strategy (Стратегия) \*\*Где применен:\*\* Алгоритмы поиска пути (BFS, DFS, A\*) \*\*Почему выбран:\*\* Позволяет динамически менять алгоритм во время выполнения. Упрощает добавление новых алгоритмов. 2.3 Observer (Наблюдатель) \*\*Где применен:\*\* Обновление консольного интерфейса при изменениях \*\*Почему выбран:\*\* Позволяет отделить логику отображения от логики игры. 2.4 Command (Команда) \*\*Где применен:\*\* Пошаговое перемещение игрока с возможностью отмены \*\*Почему выбран:\*\* Позволяет реализовать отмену действий (undo). 3\. Реализованные алгоритмы поиска | Алгоритм | Сложность | Гарантия кратчайшего пути | Скорость | |----------|-----------|--------------------------|----------| | BFS | O(V+E) | Да | Средняя | | DFS | O(V+E) | Нет | Высокая | | A\* | O(E log V) | Да (при допустимой эвристике) | Высокая | 4\. Результаты экспериментов \### Маленький лабиринт (simple\_maze.txt) | Алгоритм | Время (мс) | Посещено клеток | Длина пути | |----------|------------|-----------------|------------| | BFS | 0.15 | 8 | 4 | | DFS | 0.08 | 5 | 6 | | A\* | 0.10 | 6 | 4 | Сложный лабиринт (small\_maze.txt) | Алгоритм | Время (мс) | Посещено клеток | Длина пути | |----------|------------|-----------------|------------| | BFS | 0.35 | 24 | 10 | | DFS | 0.22 | 18 | 14 | | A\* | 0.28 | 16 | 10 | 5\. Выводы 5.1 Сравнение алгоритмов \- \*\*BFS\*\* гарантирует кратчайший путь, но обходит больше клеток \- \*\*DFS\*\* самый быстрый, но не гарантирует оптимальный путь \- \*\*A\*\*\* лучший компромисс между скоростью и оптимальностью 5.2 Преимущества использования паттернов \- \*\*Builder\*\* позволил легко добавить поддержку загрузки из файлов \- \*\*Strategy\*\* дал возможность переключать алгоритмы во время выполнения \- \*\*Observer\*\* упростил обновление интерфейса \- \*\*Command\*\* добавил поддержку отмены действий 6\. Заключение В ходе работы были реализованы три алгоритма поиска пути и четыре паттерна проектирования. Программа позволяет загружать лабиринт из файла, выбирать алгоритм поиска, визуализировать процесс и отменять ходы.