Miklix

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

Публикувано: 16 февруари 2025 г. в 21:35:11 ч. UTC
Последна актуализация: 12 януари 2026 г. в 9:05:40 ч. UTC

Генератор на лабиринти, използващ алгоритъма „Растящо дърво“ за създаване на перфектен лабиринт. Този алгоритъм има тенденция да генерира лабиринти, подобни на алгоритъма „Лов и убийство“, но с малко по-различно типично решение.

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

Growing Tree Algorithm Maze Generator

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

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

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


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








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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Допълнително четене

Ако ви е харесала тази публикация, може да ви харесат и тези предложения:


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

Микел Кристенсен

За автора

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