diff --git a/docs/report_maze.md b/docs/report_maze.md new file mode 100644 index 0000000..bcb155e --- /dev/null +++ b/docs/report_maze.md @@ -0,0 +1,132 @@ +Отчет по лабораторной работе: Поиск выхода из лабиринта + + + +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\. Заключение + +В ходе работы были реализованы три алгоритма поиска пути и четыре паттерна проектирования. Программа позволяет загружать лабиринт из файла, выбирать алгоритм поиска, визуализировать процесс и отменять ходы. +