forked from UNN/2026-rff_mp
docs: add maze project report
This commit is contained in:
parent
8c2b455ca5
commit
af055d4e17
132
docs/report_maze.md
Normal file
132
docs/report_maze.md
Normal file
|
|
@ -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\. Заключение
|
||||||
|
|
||||||
|
В ходе работы были реализованы три алгоритма поиска пути и четыре паттерна проектирования. Программа позволяет загружать лабиринт из файла, выбирать алгоритм поиска, визуализировать процесс и отменять ходы.
|
||||||
|
|
||||||
Loading…
Reference in New Issue
Block a user