Miklix

Növekvő fa algoritmus labirintus generátor

Megjelent: 2025. február 16. 21:36:24 UTC
Utolsó frissítés: 2026. január 12. 9:05:45 UTC

Labirintusgenerátor a Growing Tree algoritmus használatával tökéletes labirintus létrehozásához. Ez az algoritmus a Hunt and Kill algoritmushoz hasonló labirintusokat generál, de némileg eltérő tipikus megoldással.

Ezt az oldalt angolból gépi fordítással készítettük, hogy minél több ember számára elérhető legyen. Sajnos a gépi fordítás még nem tökéletes technológia, ezért előfordulhatnak hibák. Ha szeretné, itt megtekintheti az eredeti angol nyelvű változatot:

Growing Tree Algorithm Maze Generator

A Growing Tree algoritmus azért érdekes, mert képes több más algoritmus viselkedését is utánozni attól függően, hogy a generálás során hogyan választják ki a következő cellát. Az ezen az oldalon található implementáció egy szélesség-első, sor-szerű megközelítést használ.

A tökéletes labirintus olyan labirintus, amelyben a labirintus bármely pontjából pontosan egy út vezet bármely más pontba. Ez azt jelenti, hogy a végén nem járhatsz körbe-körbe, de gyakran fogsz zsákutcába jutni, ami arra kényszerít, hogy megfordulj és visszamenj.

Az itt generált labirintustérképek tartalmaznak egy alapértelmezett verziót kezdő és végpontok nélkül, így ezeket te magad döntheted el: a labirintus bármely pontjából bármelyik másik pontba el lehet jutni. Ha inspirációra vágysz, engedélyezhetsz egy javasolt kezdő- és célpozíciót - és még a kettő közötti megoldást is láthatod.


Új labirintus létrehozása








A növekvő fa algoritmusáról

A Growing Tree algoritmus egy rugalmas és hatékony módszer tökéletes labirintusok létrehozására. Az algoritmus azért érdekes, mert képes több más labirintusgeneráló algoritmus viselkedését is utánozni, például a Prim algoritmust, a rekurzív visszalépést és a rekurzív osztást, attól függően, hogy hogyan választjuk ki a következő cellát a feldolgozáshoz.

Hogyan működik a növekvő fa algoritmus

1. lépés: Inicializálás

  • Kezdj egy meglátogatatlan cellákból álló ráccsal.
  • Válasszon ki egy véletlenszerű kezdőcellát, és adja hozzá egy listához.

2. lépés: Labirintusgenerációs hurok

  • Amíg a cellalista nem üres: Válassz ki egy cellát a listából egy adott stratégia alapján (lásd alább). Vágj átjárót a kiválasztott cellából az egyik meg nem látogatott szomszédjába (véletlenszerűen kiválasztva). Add hozzá a szomszédot a listához, mivel most már a labirintus része. Ha a kiválasztott cellának nincsenek meg nem látogatott szomszédai, távolítsd el a listából.

3. lépés: Lezárás

  • Az algoritmus akkor fejeződik be, amikor már nincsenek cellák a listában, azaz a teljes labirintust kifaragták.

Cellakiválasztási stratégiák (az algoritmus rugalmassága)

A Growing Tree algoritmus meghatározó jellemzője, hogy hogyan választjuk ki, hogy melyik cellát dolgozzuk fel legközelebb. Ez a választás drámaian befolyásolja a labirintus megjelenését:

Legújabb cella (veremszerű viselkedés) – Rekurzív visszalépéskövető:

  • Mindig a legutóbb hozzáadott cellát jelölje ki.
  • Hosszú, kanyargós folyosókat hoz létre sok zsákutcával (mint egy mélységi keresőlabirintus).
  • A labirintusok általában hosszú átjárókkal rendelkeznek, és könnyen megoldhatók.

Véletlenszerű cella (véletlenszerű Prim algoritmusa):

  • Minden alkalommal válassz ki egy véletlenszerű cellát a listából.
  • Egyenletesebb elosztású labirintust hoz létre összetett, kusza ösvényekkel.
  • Kevesebb hosszú folyosó és több elágazás.

Legrégebbi cella (sorszerű viselkedés):

  • Mindig a lista legrégebbi celláját válaszd.
  • Egyenletesebb eloszlású labirintusokat generál, mint például szélességi keresési minta.
  • Rövid, bozótos átjárók sűrű csatlakozásokkal.
  • (Ez az itt implementált verzió)

Hibrid megközelítések:

Kombináljon stratégiákat a változatos labirintusjellemzőkhöz. Például:

  • 90%-ban legújabb, 10%-ban véletlenszerű: Leginkább egy rekurzív visszafelé haladó labirintusra hasonlít, de alkalmanként elágazik, ami hosszú folyosókat szakít fel.
  • 50%-ban legújabb, 50%-ban legidősebb: Hosszú folyosókat bokros növényzettel egyensúlyoz.

További olvasmányok

Ha tetszett ez a bejegyzés, akkor ezek a javaslatok is érdekelhetik:


Oszd meg a Bluesky-nOszd meg a FacebookonOszd meg a LinkedIn-enOszd meg a Tumblr-enOszd meg X-enOszd meg a LinkedIn-enPin a Pinteresten

Mikkel Christensen

A szerzőről

Mikkel Christensen
Mikkel a miklix.com létrehozója és tulajdonosa. Több mint 20 éves tapasztalattal rendelkezik, mint hivatásos számítógépes programozó/szoftverfejlesztő, és jelenleg teljes munkaidőben dolgozik egy nagy európai informatikai vállalatnál. Amikor nem blogol, szabadidejét érdeklődési körének, hobbijainak és tevékenységeinek széles skálájával tölti, ami bizonyos mértékig tükröződhet a weboldalon tárgyalt témák sokféleségében.