Головна Алгоритми та AI Генератор Лабіринту

🏗️ Генератор Лабіринту

Чотири алгоритми генерації лабіринту з живою анімацією та BFS-розв'язанням.

Алгоритми та AI2DЛегкий60 FPS
maze ↗ Відкрити окремо
DRAG · SCROLL · CLICK — керуйте прямо у вікні симуляції.

Схожі симуляції

Про симуляцію

Ця симуляція будує ідеальний лабіринт на квадратній сітці й анімує прокладання проходів у реальному часі. Кожна клітинка зберігає свої відкриті проходи як 4-бітну маску (північ, схід, південь, захід), і алгоритм вирішує, які стіни зруйнувати. Усі чотири методи створюють кістякове дерево на сітці: лабіринт із рівно одним шляхом між будь-якими двома клітинками і без петель. Ви можете спостерігати, як структура росте клітинка за клітинкою.

Селектор Algorithm обирає між рекурсивним відкотом (DFS), випадковим методом Прима, випадковим методом Крускала та випадковим блуканням зі стиранням петель Вілсона. Повзунок Grid size задає розміри Ш×В (від 5 до 60), а Speed керує тим, скільки кроків прокладання виконується за кадр. Після генерації Solve запускає пошук у ширину, щоб прокласти найкоротший маршрут від старту у верхньому лівому куті до виходу в нижньому правому. Алгоритми лабіринтів лежать в основі дизайну ігрових рівнів, планування шляхів роботів і викладання теорії графів.

Поширені запитання

Що таке генератор лабіринту?

Це програма, яка прокладає сітку клітинок у зв'язану мережу проходів і стін. Ця версія створює ідеальні лабіринти, тобто між будь-якими двома точками існує рівно один шлях і немає замкнених петель. Результат математично є кістяковим деревом, накресленим на сітці.

Чим відрізняються чотири алгоритми?

DFS-відкат прокладає довгі звивисті коридори; випадковий метод Прима росте з фронту й дає короткі, розгалужені гілки; метод Крускала з'єднує випадкові розрізнені області для однорідної текстури; а метод Вілсона створює неупереджений лабіринт, де всі можливі варіанти однаково ймовірні. Вони будують той самий тип лабіринту, але з дуже різним візуальним характером.

Як розв'язувач знаходить шлях?

Клік по Solve запускає пошук у ширину від стартової клітинки (верхній лівий кут) назовні, записуючи попередника кожної клітинки. Оскільки BFS досліджує в порядку відстані, перший раз, коли він досягає виходу (нижній правий кут), він знайшов найкоротший шлях, який потім відстежується назад і малюється зеленим.

Що контролюють повзунки Grid size і Speed?

Grid size задає одразу ширину й висоту квадратного лабіринту, від 5×5 до 60×60 клітинок, тож загальна кількість клітинок дорівнює цьому значенню в квадраті. Speed відповідає розкладу кроків за кадр (1, 1, 2, 4, 8, 15, 30, 60, 150, 500), дозволяючи сповільнити прокладання до повзання або завершити великий лабіринт майже миттєво.

Що означає "ідеальний лабіринт"?

Ідеальний лабіринт повністю зв'язаний і не містить петель, тож між будь-якою парою клітинок існує рівно один маршрут. У термінах теорії графів це кістякове дерево графа сітки: кожна клітинка досяжна, і видалення будь-якого проходу роз'єднає лабіринт.

Чому алгоритм Вілсона називають неупередженим?

Алгоритм Вілсона використовує випадкові блукання зі стиранням петель: він блукає випадково від невідвіданої клітинки, доки не досягне наявного лабіринту, стираючи по дорозі будь-які утворені петлі. Ця процедура вибирає рівномірно випадково з-поміж усіх можливих кістякових дерев, тож кожен лабіринт даного розміру однаково ймовірний. Девід Вілсон опублікував цей метод у 1996 році.

Як працює рекурсивний відкот?

Він починає з клітинки, позначає її відвіданою й повторно переходить до випадкової невідвіданої сусідньої клітинки, прокладаючи стіну між ними і кладучи клітинку в стек. Коли клітинка не має невідвіданих сусідів, він відкочується, знімаючи зі стеку. Це дослідження в глибину створює довгі, звивисті коридори, типові для DFS-лабіринтів.

Як внутрішньо зберігаються проходи?

Кожна клітинка містить однобайтову бітову маску, де біти представляють відкриті проходи на північ, схід, південь і захід (значення 1, 2, 4 і 8). Прокладання стіни встановлює відповідний біт в обох сусідніх клітинках. Рендерер зчитує ці біти, щоб намалювати з'єднувальні містки між клітинками, а розв'язувач зчитує їх, щоб знати, які ходи дозволені.

Чи фізично або математично точна ця симуляція?

Так. Кожен алгоритм реалізовано вірно: DFS з явним стеком, метод Прима з випадковим фронтом, метод Крускала з перетасованим списком ребер і зв'язністю через систему непересічних множин, а метод Вілсона зі справжніми блуканнями зі стиранням петель. Розв'язувач BFS — це стандартний пошук найкоротшого шляху, тож підсвічений маршрут завжди оптимальний для ідеального лабіринту.

Навіщо методу Крускала потрібна система непересічних множин?

Метод Крускала перетасовує кожну стіну й розглядає їх по одній, прокладаючи стіну лише тоді, коли дві клітинки, які вона розділяє, належать до різних областей. Структура непересічних множин (union-find) відстежує, які клітинки вже з'єднані, тож алгоритм може уникати створення петель, зливаючи сітку в єдине дерево.

Де застосовують алгоритми лабіринтів у реальному світі?

Вони застосовуються в дизайні рівнів і підземель відеоігор, інструментах процедурного контенту та як класичні навчальні приклади обходу графів і кістякових дерев. Ті самі ідеї поширюються на робототехніку й маршрутизацію мереж, де знаходження зв'язних шляхів без петель у просторі є важливим.