2026-rff_mp/ivantsovma/docs/report_maze.md

133 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Отчет по лабораторной работе: Поиск выхода из лабиринта
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\. Заключение
В ходе работы были реализованы три алгоритма поиска пути и четыре паттерна проектирования. Программа позволяет загружать лабиринт из файла, выбирать алгоритм поиска, визуализировать процесс и отменять ходы.