Miklix

Генератор лабіринтів алгоритму Еллера

Опубліковано: 16 лютого 2025 р. о 20:07:21 UTC
Останнє оновлення: 12 січня 2026 р. о 09:04:17 UTC

Генератор лабіринтів, що використовує алгоритм Еллера для створення ідеального лабіринту. Цей алгоритм цікавий тим, що вимагає збереження лише поточного рядка (не всього лабіринту) в пам'яті, тому його можна використовувати для створення дуже й дуже великих лабіринтів навіть на дуже обмежених системах.

Ця сторінка була перекладена з англійської мови машинним перекладом, щоб зробити її доступною для якомога більшої кількості людей. На жаль, машинний переклад ще не є досконалою технологією, тому можуть траплятися помилки. Якщо ви бажаєте, ви можете переглянути оригінальну англійську версію тут:

Eller's Algorithm Maze Generator

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

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

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


Створіть новий лабіринт








Про алгоритм Еллера

Алгоритм Еллера був запропонований Девідом Еллером.

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

Як працює алгоритм Еллера для генерації лабіринтів

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

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

Крок 1: Ініціалізація першого рядка

  • Призначте кожній клітинці в рядку унікальний ідентифікатор набору.

Крок 2: Об'єднайте кілька суміжних комірок горизонтально

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

Крок 3: Створення вертикальних з'єднань з наступним рядом

  • Для кожного набору, що з'являється в рядку, принаймні одна клітинка повинна бути з'єднана вниз (для забезпечення зв'язності).
  • Випадковим чином виберіть одну або кілька клітинок з кожного набору, щоб з'єднати їх з наступним рядком.

Крок 4: Перехід до наступного рядка

  • Перенесіть вертикальні зв'язки, призначивши той самий ідентифікатор набору відповідним клітинкам нижче.
  • Призначте нові ідентифікатори наборів будь-яким непризначеним клітинкам.

Крок 5: Повторюйте кроки 2–4, доки не буде досягнуто останнього ряду

  • Продовжуйте обробку рядок за рядком.

Крок 6: Обробка останнього ряду

  • Переконайтеся, що всі клітинки в останньому рядку належать до одного набору, об'єднавши будь-які інші окремі набори.

Додаткова література

Якщо вам сподобався цей пост, вам також можуть сподобатися ці пропозиції:


Поділитися на BlueskyПоділіться на FacebookПоділіться на LinkedInПоділіться на TumblrПоділитися на XПоділіться на LinkedInЗакріпити на Pinterest

Міккель Крістенсен

Про автора

Міккель Крістенсен
Міккель - творець і власник сайту miklix.com. Він має понад 20 років досвіду роботи професійним програмістом/розробником програмного забезпечення і наразі працює на повну ставку у великій європейській ІТ-корпорації. У вільний від ведення блогу час він присвячує різноманітним інтересам, хобі та захопленням, що певною мірою відображається на різноманітності тем, які висвітлюються на цьому сайті.