Miklix

Recursieve Backtracker Doolhof Generator

Gepubliceerd: 16 februari 2025 om 18:16:19 UTC

Maze generator die het recursive backtracker-algoritme gebruikt om een perfect doolhof te creëren. Dit algoritme creëert doorgaans doolhoven met lange, kronkelende gangen en een zeer lange, draaiende oplossing.

Deze pagina is machinaal uit het Engels vertaald om hem voor zoveel mogelijk mensen toegankelijk te maken. Helaas is machinevertaling nog geen geperfectioneerde technologie, dus er kunnen fouten optreden. Als je dat liever hebt, kun je hier de originele Engelse versie bekijken:

Recursive Backtracker Maze Generator

Het recursieve backtracker-algoritme is eigenlijk een algemene diepte-eerst-zoekopdracht. Wanneer het wordt gebruikt voor het genereren van doolhoven, wordt het lichtjes aangepast om het pad willekeurig te kiezen, terwijl men bij daadwerkelijke zoekdoeleinden doorgaans elk niveau in lineaire volgorde zou doorzoeken. Het produceert meestal doolhoven met lange, kronkelende gangen en een zeer lange, draaiende oplossing.

Een perfect doolhof is een doolhof waarin er precies één pad is van elk punt in het doolhof naar elk ander punt. Dat betekent dat je geen rondjes kunt lopen, maar dat je vaak op doodlopende paden stuit, waardoor je gedwongen wordt om te keren en terug te gaan.

De doolhofkaarten die hier worden gegenereerd bevatten een standaardversie zonder start- en eindposities, zodat je die zelf kunt bepalen: er is een oplossing van elk punt in het doolhof naar elk ander punt. Als je inspiratie wilt, kun je een voorgestelde start- en eindpositie inschakelen - en zelfs de oplossing tussen die twee bekijken.


Nieuw doolhof genereren








Het recursive backtracker-algoritme is een depth-first zoekmethode voor het genereren van perfecte doolhoven (doolhoven zonder lussen en met één pad tussen twee willekeurige punten). Het is eenvoudig, efficiënt en produceert visueel aantrekkelijke doolhoven met lange, kronkelende gangen.

Ondanks de naam hoeft het niet per se te worden geïmplementeerd met behulp van recursie. Het wordt vaak geïmplementeerd in een iteratieve benadering met behulp van een LIFO-wachtrij (d.w.z. een stapel). Voor zeer grote doolhoven is het gebruik van recursie waarschijnlijker om te resulteren in een overloop van de aanroepstapel, afhankelijk van de programmeertaal en het beschikbare geheugen. Een LIFO-wachtrij kan gemakkelijker worden aangepast om grote hoeveelheden gegevens te verwerken, zelfs door de wachtrij op schijf of in een database te houden als het beschikbare geheugen onvoldoende is.


Hoe het werkt

Het algoritme werkt met een stack-based depth-first search-aanpak. Hier is de stapsgewijze uitsplitsing:

  1. Kies een startcel en markeer deze als bezocht.
  2. Hoewel er nog onbezochte cellen zijn:
    • Kijk eens naar de aangrenzende cellen die nog niet bezocht zijn.
    • Als er minstens één onbezochte buur is:
      • Kies willekeurig een van de buren die je niet kent.
      • Verwijder de muur tussen de huidige cel en de gekozen buurcel.
      • Ga naar de gekozen buur en markeer deze als bezocht.
      • Duw de huidige cel op de stapel.
    • Als er geen onbezochte buren zijn:
      • Ga terug door de laatste cel van de stapel te verwijderen.
  3. Herhaal dit proces totdat de stapel leeg is.

Een interessant feit over dit algoritme is dat het zowel als een doolhofgenerator als een doolhofoplosser werkt. Als je het uitvoert op een reeds gegenereerd doolhof en gewoon stopt wanneer je het vastgestelde eindpunt bereikt, zal de stack de oplossing voor het doolhof bevatten.

Ik heb eigenlijk twee versies van dit algoritme in het spel op deze site: een LIFO-queue-based versie voor het genereren van doolhoven op deze pagina en een recursie-based versie voor het oplossen van doolhoven, ook doolhoven gegenereerd door andere algoritmes (zo worden de kaarten met de oplossingen gemaakt). Twee verschillende versies hebben is alleen voor de sport omdat ik een nerd ben die het interessant vindt, beide hadden voor beide kunnen werken ;-)

Delen op BlueskyDelen op FacebookDelen op LinkedInDelen op TumblrDelen op XDelen op LinkedInPin op Pinterest

Mikkel Bang Christensen

Over de auteur

Mikkel Bang Christensen
Mikkel is de bedenker en eigenaar van miklix.com. Hij heeft meer dan 20 jaar ervaring als professioneel computerprogrammeur/softwareontwikkelaar en werkt momenteel fulltime voor een groot Europees IT-bedrijf. Als hij niet blogt, besteedt hij zijn vrije tijd aan een breed scala aan interesses, hobby's en activiteiten, die tot op zekere hoogte weerspiegeld kunnen worden in de verscheidenheid aan onderwerpen op deze website.