2026-rff_mp/vinichukan/docs/report.md
2026-05-24 11:40:51 +03:00

4.3 KiB
Raw Blame History

Отчёт по заданию №2

Реализация поиска пути в лабиринте с использованием паттернов проектирования


1. Цель работы

Разработать архитектуру и реализацию системы поиска пути в лабиринте, применив паттерны:

  • Builder — построение лабиринта из файла
  • Strategy — выбор алгоритма поиска
  • Observer — отображение состояния
  • Command — управление игроком

Также провести экспериментальное сравнение алгоритмов BFS, DFS и A*.


2. Архитектура проекта

Структура каталогов:

vinichukan/
│
├── src/
│   ├── builder/
│   ├── model/
│   ├── solver/
│   ├── strategy/
│   └── ui/
│
├── mazes/
├── experiments/
└── docs/

3. Используемые паттерны

3.1 Builder

Абстрагирует процесс построения лабиринта из текстового файла.

3.2 Strategy

Позволяет переключать алгоритмы поиска пути без изменения остального кода.

3.3 Observer

Используется для отображения состояния лабиринта в консоли.

3.4 Command

Реализует управление игроком и пошаговое перемещение.


4. Диаграмма классов

Диаграмма находится в файле: class_diagram.mmd


5. Эксперименты

Эксперименты проводились на пяти лабиринтах:

  • small.txt — простой, проходимый
  • medium.txt — средний по сложности
  • empty.txt — полностью свободное поле
  • no_exit.txt — отсутствует выход
  • big.txt — большой лабиринт, путь отсутствует

Алгоритмы:

  • BFS
  • DFS
  • A*

6. Результаты

6.1 Таблица результатов

Файл Алгоритм Посещено Длина пути
big.txt BFS 27 0
big.txt DFS 27 0
big.txt A* 27 0
empty.txt BFS 10 10
empty.txt DFS 10 10
empty.txt A* 10 10
medium.txt BFS 21 17
medium.txt DFS 19 17
medium.txt A* 21 17
no_exit.txt BFS 0 0
no_exit.txt DFS 0 0
no_exit.txt A* 0 0
small.txt BFS 7 7
small.txt DFS 7 7
small.txt A* 7 7

7. Графики

Графики находятся в файле:

experiments/graphs.ipynb

  • время работы алгоритмов
  • количество посещённых клеток

8. Выводы

  1. A* показывает лучшие результаты на средних и больших лабиринтах, но имеет небольшой накладной расход.
  2. DFS посещает меньше клеток, но не гарантирует кратчайший путь.
  3. BFS всегда находит кратчайший путь, но исследует больше пространства.
  4. На лабиринтах без выхода все алгоритмы корректно возвращают path_len = 0.
  5. Архитектура с паттернами позволяет легко расширять проект и добавлять новые алгоритмы.

9. Приложения

  • Исходный код
  • Лабиринты
  • CSV с результатами
  • Диаграммы