# Отчёт по лабораторной работе: Поиск пути в лабиринте

## 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