Miklix

Генератор на лабиринт за алгоритъм за отглеждане на дървета

Публикувано: 16 февруари 2025 г. в 21:35:11 ч. UTC
Последна актуализация: 6 март 2025 г. в 9:54:28 ч. UTC

Генератор на лабиринт, използващ алгоритъма Growing Tree за създаване на перфектен лабиринт. Този алгоритъм има тенденция да генерира лабиринти, подобни на алгоритъма Hunt and Kill, но с малко по-различно типично решение.

Тази страница е машинно преведена от английски език, за да бъде достъпна за възможно най-много хора. За съжаление машинният превод все още не е съвършена технология, така че могат да възникнат грешки. Ако предпочитате, можете да видите оригиналната версия на английски език тук:

Growing Tree Algorithm Maze Generator

Алгоритъмът Growing Tree е интересен, защото може да емулира поведението на няколко други алгоритъма, в зависимост от това как е избрана следващата клетка по време на генерирането. Реализацията на тази страница използва подход, подобен на опашка.

Перфектен лабиринт е лабиринт, в който има точно един път от всяка точка в лабиринта до всяка друга точка. Това означава, че не можете да се въртите в кръг, но често ще срещате задънени улици, което ще ви принуди да се обърнете и да се върнете обратно.

Генерираните тук карти на лабиринта включват версия по подразбиране без начални и крайни позиции, така че можете да ги определите сами: ще има решение от всяка точка в лабиринта до всяка друга точка. Ако искате да получите вдъхновение, можете да активирате предложена начална и крайна позиция - и дори да видите решението между двете.


Генериране на нов лабиринт








За алгоритъма за растящо дърво

Алгоритъмът Growing Tree е гъвкав и мощен метод за генериране на перфектни лабиринти. Алгоритъмът е интересен, защото може да емулира поведението на няколко други алгоритъма за генериране на лабиринти, като алгоритъма на Прим, рекурсивно връщане назад и рекурсивно делене, в зависимост от това как избирате следващата клетка за обработка.

Как работи алгоритъмът за растящо дърво

Стъпка 1: Инициализация

  • Започнете с мрежа от непосетени клетки.
  • Изберете произволна начална клетка и я добавете към списък.

Стъпка 2: Цикъл за генериране на лабиринт

  • Докато списъкът с клетки не е празен:
    • Изберете клетка от списъка въз основа на конкретна стратегия (обяснена по-долу).
    • Издълбайте проход от избраната клетка до един от нейните непосетени съседи (избран на случаен принцип).
    • Добавете съседа към списъка, тъй като вече е част от лабиринта.
    • Ако избраната клетка няма непосетени съседи, премахнете я от списъка.

Стъпка 3: Прекратяване

  • Алгоритъмът завършва, когато няма повече клетки в списъка, което означава, че целият лабиринт е издълбан.

Стратегии за избор на клетки (гъвкавост на алгоритъма)

Определящата характеристика на алгоритъма Growing Tree е как избирате коя клетка да обработите следващата. Този избор драматично влияе на външния вид на лабиринта:

Най-нова клетка (подобно на стек поведение) – Рекурсивен обратен тракер:

  • Винаги избирайте последната добавена клетка.
  • Създава дълги, криволичещи коридори с много задънени улици (като лабиринт за търсене на дълбочина).
  • Лабиринтите обикновено имат дълги пасажи и са лесни за решаване.

Случайна клетка (алгоритъм на рандомизирания Прим):

  • Избирайте произволна клетка от списъка всеки път.
  • Създава по-равномерно разпределен лабиринт със сложни, заплетени пътеки.
  • По-малко дълги коридори и повече разклонения.

Най-старата клетка (поведение, подобно на опашка):

  • Винаги избирайте най-старата клетка в списъка.
  • Генерира лабиринти с по-равномерно разпространение, като модел на търсене в ширина.
  • Къси, храстовидни проходи с плътни връзки.
  • (Това е версията, реализирана тук)

Хибридни подходи:

Комбинирайте стратегии за различни характеристики на лабиринта. Например:

  • 90% най-новите, 10% случайни: Прилича най-вече на рекурсивен лабиринт за проследяване, но с редки разклонения, които разбиват дълги коридори.
  • 50% най-нови, 50% най-стари: Балансира дълги коридори с храстовиден растеж.

Споделете в BlueskyСподелете във FacebookСподелете в LinkedInСподелете в TumblrСподелете в XСподелете в LinkedInЗакачи в Пинтерест

Микел Банг Кристенсен

За автора

Микел Банг Кристенсен
Микел е създател и собственик на сайта miklix.com. Той има над 20 години опит като професионален компютърен програмист/разработчик на софтуер и в момента работи на пълен работен ден в голяма европейска ИТ корпорация. Когато не пише в блога, той прекарва свободното си време в широк спектър от интереси, хобита и дейности, които до известна степен могат да бъдат отразени в разнообразието от теми, обхванати в този уебсайт.