forked from UNN/2026-rff_mp
[2] оформил отчет
This commit is contained in:
parent
5b68540615
commit
65594bdb6e
|
|
@ -0,0 +1,46 @@
|
||||||
|
Цель работы
|
||||||
|
|
||||||
|
В этом задании я сделал программу для поиска пути в лабиринте. Лабиринт загружается из текстового файла, после этого для него запускаются три алгоритма: BFS, DFS и A\*. Нужно было сравнить как они проходят разные карты
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
  В файле maze.py находится описание лабиринта. Cell отвечает за отдельную клетку, а Maze хранит всю карту, старт, финиш и умеет находить соседние клетки, куда можно идти. Для загрузки карты из файла сделан MazeBuilder. Он читает строки, проверяет их длину и ищет точки S и F. \[тут я столкнулся с ошибкой на hard.txt, потому что одна строка была другой длины]
|
||||||
|
|
||||||
|
  В файле solver.py находится поиск пути.MazeSolver получает стратегию поиска и запускает её. Были сделаны три стратегии: BfsStrategy, DfsStrategy и AstarStrategy. BFS идёт в ширину, DFS идёт в глубину, а A\* использует расстояние до финиша
|
||||||
|
|
||||||
|
  Сначала программа проверялась на simple.txt, потом были добавлены medium.txt и hard.txt. Для каждой карты запускались все три алгоритма. Программа выводила найденный путь, количество посещённых клеток и длину пути
|
||||||
|
|
||||||
|
  Для замеров сделан файл zamery.py. Он запускает алгоритмы по 5 раз и сохраняет результаты в results.csv
|
||||||
|
|
||||||
|
  Результаты
|
||||||
|
|
||||||
|
simple.txt; BFS; время 0.00001532; посещено 9; длина пути 5
|
||||||
|
|
||||||
|
simple.txt; DFS; время 0.00000710; посещено 5; длина пути 5
|
||||||
|
|
||||||
|
simple.txt; A\*; время 0.00001304; посещено 5; длина пути 5
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
medium.txt; BFS; время 0.00003650; посещено 29; длина пути 29
|
||||||
|
|
||||||
|
medium.txt; DFS; время 0.00003346; посещено 29; длина пути 29
|
||||||
|
|
||||||
|
medium.txt; A\*; время 0.00004344; посещено 29; длина пути 29
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
hard.txt; BFS; время 0.00004418; посещено 38; длина пути 19
|
||||||
|
|
||||||
|
hard.txt; DFS; время 0.00002262; посещено 19; длина пути 19
|
||||||
|
|
||||||
|
hard.txt; A\*; время 0.00003804; посещено 25; длина пути 19
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
  По результатам видно, что на простом лабиринте разница почти не важна. На medium.txt все алгоритмы прошли примерно одинаково. На hard.txt разница заметнее: BFS посетил больше всего клеток, DFS меньше всего, а A\* оказался между ними. При этом длина пути на hard.txt у всех получилась одинаковая
|
||||||
|
|
||||||
|
  Заключение
|
||||||
|
|
||||||
|
В работе получилось сделать загрузку лабиринта из файла и несколько способов поиска пути. BFS надёжный, но может обходить больше клеток. DFS простой и иногда быстро доходит до финиша, но зависит от формы лабиринта. A\* старается идти ближе к цели, но на маленьких картах его преимущество не всегда видно.В целом задание было понятнее когда появились карты и путь стал выводиться прямо в консоли. Самая заметная проблема была с неправильной строкой в hard.txt, но после исправления все карты начали нормально запускаться
|
||||||
|
|
||||||
Loading…
Reference in New Issue
Block a user