2026-rff_mp/ivantsovma/docs/report_maze.md

4.2 KiB
Raw Blame History

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

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

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