Отчет по лабораторной работе: Поиск выхода из лабиринта



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\. Заключение

В ходе работы были реализованы три алгоритма поиска пути и четыре паттерна проектирования. Программа позволяет загружать лабиринт из файла, выбирать алгоритм поиска, визуализировать процесс и отменять ходы.

