Miklix

Generator de labirint al algoritmului de creștere a arborilor

Publicat: 16 februarie 2025 la 21:37:04 UTC
Ultima actualizare: 12 ianuarie 2026 la 09:05:53 UTC

Generator de labirinturi care folosește algoritmul Growing Tree pentru a crea un labirint perfect. Acest algoritm tinde să genereze labirinturi similare algoritmului Hunt and Kill, dar cu o soluție tipică oarecum diferită.

Această pagină a fost tradusă automat din limba engleză pentru a o face accesibilă cât mai multor persoane. Din păcate, traducerea automată nu este încă o tehnologie perfecționată, astfel încât pot apărea erori. Dacă preferați, puteți vizualiza versiunea originală în limba engleză aici:

Growing Tree Algorithm Maze Generator

Algoritmul Growing Tree este interesant, deoarece poate emula comportamentul mai multor alți algoritmi, în funcție de modul în care este aleasă următoarea celulă în timpul generării. Implementarea de pe această pagină folosește o abordare de tip coadă, bazată pe lățime (bound first).

Un labirint perfect este un labirint în care există exact o singură cale de la orice punct din labirint la orice alt punct. Aceasta înseamnă că nu puteți ajunge să vă învârtiți în cerc, dar veți întâlni adesea fundături, forțându-vă să vă întoarceți.

Hărțile labirintului generate aici includ o versiune implicită fără poziții de început și de sfârșit, astfel încât să le puteți decide singuri: va exista o soluție din orice punct al labirintului către orice alt punct. Dacă doriți să vă inspirați, puteți activa o poziție de început și de sfârșit sugerată - și chiar să vedeți soluția între cele două.


Generați un labirint nou








Despre algoritmul arborelui în creștere

Algoritmul Growing Tree este o metodă flexibilă și puternică pentru generarea de labirinturi perfecte. Algoritmul este interesant deoarece poate emula comportamentul altor algoritmi de generare a labirintului, cum ar fi algoritmul lui Prim, backtracking recursiv și divizarea recursivă, în funcție de modul în care selectați următoarea celulă de procesat.

Cum funcționează algoritmul arborelui în creștere

Pasul 1: Inițializare

  • Începeți cu o grilă de celule nevizitate.
  • Alegeți o celulă de început aleatorie și adăugați-o într-o listă.

Pasul 2: Bucla de generare a labirintului

  • Cât timp lista de celule nu este goală: Selectați o celulă din listă pe baza unei strategii specifice (explicată mai jos). Creați un pasaj de la celula selectată la unul dintre vecinii săi nevizitați (aleși aleatoriu). Adăugați vecinul în listă, deoarece acum face parte din labirint. Dacă celula selectată nu are vecini nevizitați, eliminați-o din listă.

Pasul 3: Terminarea

  • Algoritmul se termină când nu mai există celule în listă, ceea ce înseamnă că întregul labirint a fost sculptat.

Strategii de selecție a celulelor (flexibilitatea algoritmului)

Caracteristica definitorie a algoritmului Growing Tree este modul în care alegi ce celulă să procesezi în continuare. Această alegere afectează dramatic aspectul labirintului:

Cea mai nouă celulă (comportament de tip stivă) – Backtracker recursiv:

  • Selectați întotdeauna celula adăugată cel mai recent.
  • Produce coridoare lungi și întortocheate, cu multe fundături (ca un labirint de căutare în adâncime).
  • Labirinturile tind să aibă pasaje lungi și sunt ușor de rezolvat.

Celulă aleatorie (algoritmul lui Prim randomizat):

  • Alegeți o celulă aleatorie din listă de fiecare dată.
  • Creează un labirint distribuit mai uniform, cu căi complexe și încâlcite.
  • Mai puține coridoare lungi și mai multe ramificări.

Cea mai veche celulă (comportament similar coadei):

  • Alegeți întotdeauna cea mai veche celulă din listă.
  • Generează labirinturi cu o răspândire mai uniformă, precum un model de căutare bazat pe lățime.
  • Pasaje scurte și stufoase, cu conexiuni dense.
  • (Aceasta este versiunea implementată aici)

Abordări hibride:

Combinați strategii pentru diverse caracteristici ale labirintului. De exemplu:

  • 90% cel mai nou, 10% aleatoriu: Arată în mare parte ca un labirint recursiv cu tracker invers, dar cu ramificații ocazionale care întrerup coridoare lungi.
  • 50% cel mai nou, 50% cel mai vechi: Echilibrează coridoarele lungi cu o creștere densă.

Lectură suplimentară

Dacă ți-a plăcut această postare, s-ar putea să-ți placă și aceste sugestii:


Distribuie pe BlueskyDistribuie pe FacebookDistribuie pe LinkedInDistribuie pe TumblrDistribuie pe XDistribuie pe LinkedInPin pe Pinterest

Mikkel Christensen

Despre autor

Mikkel Christensen
Mikkel este creatorul și proprietarul miklix.com. El are peste 20 de ani de experiență ca programator de calculatoare/dezvoltator software profesionist și este în prezent angajat cu normă întreagă pentru o mare corporație europeană de IT. Atunci când nu scrie pe blog, își petrece timpul liber cu o gamă largă de interese, hobby-uri și activități, care se pot reflecta într-o anumită măsură în varietatea de subiecte abordate pe acest site.