# Отчёт по лабораторной работе: Поиск пути в лабиринте ## 1. Цель работы Разработать программу для загрузки лабиринта из текстового файла, поиска пути от старта до выхода с использованием алгоритмов BFS, DFS, A*, сбора статистики (время, посещённые клетки, длина пути) и проведения экспериментального сравнения. ## 2. Архитектура и использованные паттерны - **Builder** (`TextLabyrinthLoader`) – создание лабиринта из файла. - **Strategy** (`BFS`, `DFS`, `AStar`) – взаимозаменяемые алгоритмы поиска. - **Observer** (`ConsoleRenderer`) – визуализация событий. - **Command** (`MoveAction`) – отмена ходов игрока. Программа поддерживает интерактивный режим (движение, автопоиск) и режим экспериментов (`python main.py experiment`). ## 3. Тестовые лабиринты | Имя файла | Описание | |-----------|----------| | `maze1.txt` | Простой лабиринт 10×6 | | `maze10x10.txt` | Лабиринт среднего размера 10×10 | | `maze20x20.txt` | Большой лабиринт 20×20 | | `maze_empty.txt` | Пустое поле 15×15 (без стен) | | `maze_no_exit.txt` | Лабиринт без достижимого выхода | ## 4. Результаты экспериментов Каждый алгоритм запускался 3 раза на каждом лабиринте, приведены средние значения. | Лабиринт | Алгоритм | Время (мс) | Посещено клеток | Длина пути | |---------------|----------|------------|-----------------|------------| | Small 10x6 | BFS | 0.035 | 11.0 | 8 | | Small 10x6 | DFS | 0.019 | 9.0 | 8 | | Small 10x6 | A* | 0.047 | 11.0 | 8 | | Medium 10x10 | BFS | 0.054 | 28.0 | 16 | | Medium 10x10 | DFS | 0.039 | 23.0 | 18 | | Medium 10x10 | A* | 0.079 | 21.0 | 16 | | Large 20x20 | BFS | 0.364 | 183.0 | 35 | | Large 20x20 | DFS | 0.267 | 194.0 | 103 | | Large 20x20 | A* | 0.453 | 104.0 | 35 | | Empty 15x15 | BFS | 0.028 | 16.0 | 16 | | Empty 15x15 | DFS | 0.028 | 16.0 | 16 | | Empty 15x15 | A* | 0.051 | 16.0 | 16 | | No exit 10x10 | BFS | 0.059 | 12.0 | 0 | | No exit 10x10 | DFS | 0.050 | 12.0 | 0 | | No exit 10x10 | A* | 0.095 | 12.0 | 0 | ## 5. График сравнения ![Сравнение алгоритмов](performance_comparison.png) ## 6. Проверка соответствия ТЗ | Требование | Выполнение | |------------|------------| | Загрузка лабиринта из текстового файла (# стена, S старт, E выход) | ok | | Реализация BFS | ok | | Реализация DFS | ok | | Реализация A* | ok | | Сбор статистики (время, посещённые клетки, длина пути) | ok | | Сравнительный эксперимент на лабиринтах разной сложности | ok | | Визуализация результатов (график) | ok | | Интерактивный режим с отменой ходов | ok | ## 7. Выводы - **BFS** всегда находит кратчайший путь, но на сложных лабиринтах посещает больше клеток, чем A*. - **DFS** самый быстрый по времени, однако в запутанных лабиринтах даёт неоптимальный путь. - **A*** показывает лучший баланс: оптимальный путь и наименьшее число посещённых клеток. - При отсутствии пути все алгоритмы корректно возвращают длину 0. **Рекомендация:** для сложных лабиринтов предпочтительнее A*. --- *Файлы результатов: `experiment_results.csv`, `performance_comparison.png`.* I USE ARCH SAME WITH ME FRIEND IVAN BTW