Miklix

Growing Tree algoritme labyrintgenerator

Publisert: 16. februar 2025 kl. 21:36:53 UTC
Sist oppdatert: 6. mars 2025 kl. 09:56:10 UTC

Labyrintgenerator som bruker Growing Tree-algoritmen for å lage en perfekt labyrint. Denne algoritmen har en tendens til å generere labyrinter som ligner på Hunt and Kill-algoritmen, men med en noe annen typisk løsning.

Denne siden er maskinoversatt fra engelsk for å gjøre den tilgjengelig for så mange som mulig. Dessverre er maskinoversettelse ennå ikke en fullkommen teknologi, så det kan forekomme feil. Hvis du foretrekker det, kan du se den engelske originalversjonen her:

Growing Tree Algorithm Maze Generator

Growing Tree-algoritmen er interessant, fordi den kan emulere oppførselen til flere andre algoritmer, avhengig av hvordan neste celle velges under generering. Implementeringen på denne siden bruker en bredde-først, kølignende tilnærming.

En perfekt labyrint er en labyrint der det finnes nøyaktig én vei fra et hvilket som helst punkt i labyrinten til et hvilket som helst annet punkt. Det betyr at du ikke kan ende opp med å gå i sirkler, men at du ofte vil støte på blindveier som tvinger deg til å snu og gå tilbake.

Labyrintkartene som genereres her, inneholder en standardversjon uten start- og målposisjoner, slik at du selv kan bestemme disse: Det vil finnes en løsning fra et hvilket som helst punkt i labyrinten til et hvilket som helst annet punkt. Hvis du vil ha inspirasjon, kan du aktivere en foreslått start- og målposisjon - og til og med se løsningen mellom de to.


Generer ny labyrint








Om algoritmen for voksende tre

Growing Tree-algoritmen er en fleksibel og kraftig metode for å generere perfekte labyrinter. Algoritmen er interessant fordi den kan emulere oppførselen til flere andre labyrintgenereringsalgoritmer, for eksempel Prims algoritme, rekursiv tilbakesporing og rekursiv divisjon, avhengig av hvordan du velger neste celle som skal behandles.

Hvordan algoritmen for voksende tre fungerer

Trinn 1: Initialisering

  • Start med et rutenett av ubesøkte celler.
  • Velg en tilfeldig startcelle og legg den til i en liste.

Trinn 2: Maze Generation Loop

  • Mens cellelisten ikke er tom:
    • Velg en celle fra listen basert på en bestemt strategi (forklart nedenfor).
    • Skjær en passasje fra den valgte cellen til en av dens ubesøkte naboer (valgt tilfeldig).
    • Legg til naboen på listen siden den nå er en del av labyrinten.
    • Hvis den valgte cellen ikke har noen ubesøkte naboer, fjern den fra listen.

Trinn 3: Oppsigelse

  • Algoritmen avsluttes når det ikke er flere celler i listen, noe som betyr at hele labyrinten er skåret ut.

Cellevalgstrategier (algoritmens fleksibilitet)

Den definerende funksjonen til Growing Tree-algoritmen er hvordan du velger hvilken celle som skal behandles neste. Dette valget påvirker dramatisk labyrintens utseende:

Nyeste celle (stabellignende oppførsel) – Rekursiv tilbakesporing:

  • Velg alltid den sist lagt til cellen.
  • Produserer lange, kronglete korridorer med mange blindveier (som en dybde-først søkelabyrint).
  • Labyrinter har en tendens til å ha lange passasjer og er enkle å løse.

Tilfeldig celle (randomisert Prims algoritme):

  • Velg en tilfeldig celle fra listen hver gang.
  • Skaper en mer jevnt fordelt labyrint med komplekse, sammenfiltrede stier.
  • Færre lange korridorer og mer forgrening.

Eldste celle (kølignende oppførsel):

  • Velg alltid den eldste cellen i listen.
  • Genererer labyrinter med en mer jevn spredning, som et bredde-først søkemønster.
  • Korte, buskete passasjer med tette forbindelser.
  • (Dette er versjonen implementert her)

Hybride tilnærminger:

Kombiner strategier for varierte labyrintegenskaper. For eksempel:

  • 90 % nyeste, 10 % tilfeldig: Ser mest ut som en rekursiv backtracker-labyrint, men med sporadiske grener som bryter opp lange korridorer.
  • 50 % nyeste, 50 % eldst: Balanserer lange korridorer med buskete vekst.

Del på BlueskyDel på FacebookDel på LinkedInDel på TumblrDel på XDel på LinkedInFest på Pinterest

Mikkel Bang Christensen

Om forfatteren

Mikkel Bang Christensen
Mikkel er skaperen og eieren av miklix.com. Han har over 20 års erfaring som profesjonell dataprogrammerer/programvareutvikler og er for tiden ansatt på fulltid i et stort europeisk IT-selskap. Når han ikke blogger, bruker han fritiden sin på en lang rekke interesser, hobbyer og aktiviteter, noe som til en viss grad kan gjenspeiles i de mange ulike temaene som dekkes på dette nettstedet.