Miklix

Rekursiewe Backtracker Maze Generator

Gepubliseer: 16 Februarie 2025 om 18:24:08 UTC
Laas opgedateer: 12 Januarie 2026 om 09:02:30 UTC

Doolhofgenerator wat die rekursiewe terugspooralgoritme gebruik om 'n perfekte doolhof te skep. Hierdie algoritme is geneig om doolhowe met lang, kronkelende gange en 'n baie lang, kronkelende oplossing te skep.

Hierdie bladsy is masjienvertaal uit Engels om dit vir soveel mense moontlik toeganklik te maak. Ongelukkig is masjienvertaling nog nie 'n volmaakte tegnologie nie, dus kan foute voorkom. As jy verkies, kan jy die oorspronklike Engelse weergawe hier sien:

Recursive Backtracker Maze Generator

Die rekursiewe terugspoor-algoritme is eintlik 'n algemene diepte-eerste soektog. Wanneer dit vir doolhofgenerering gebruik word, word dit effens aangepas om die pad lukraak te kies, terwyl 'n mens tipies elke vlak in lineêre volgorde sou deursoek as dit vir werklike soekdoeleindes gebruik word. Dit is geneig om doolhowe met lang, kronkelende gange en 'n baie lang, kronkelende oplossing te produseer.

'n Volmaakte doolhof is 'n doolhof waarin daar presies een pad van enige punt in die doolhof na enige ander punt is. Dit beteken dat jy nie uiteindelik in sirkels kan rondloop nie, maar jy sal dikwels doodloopstrate teëkom, wat jou dwing om om te draai en terug te gaan.

Die doolhofkaarte wat hier gegenereer word, bevat 'n verstekweergawe sonder enige begin- en eindposisies, so jy kan dit self besluit: daar sal 'n oplossing wees van enige punt in die doolhof na enige ander punt. As jy inspirasie wil hê, kan jy 'n voorgestelde begin- en eindposisie aktiveer - en selfs die oplossing tussen die twee sien.


Genereer nuwe doolhof








Die rekursiewe terugspooralgoritme is 'n diepte-eerste soekmetode vir die generering van perfekte doolhowe (doolhowe sonder lusse en 'n enkele pad tussen enige twee punte). Dit is eenvoudig, doeltreffend en lewer visueel aantreklike doolhowe met lang, kronkelende gange.

Ten spyte van die naam, hoef dit nie noodwendig met rekursie geïmplementeer te word nie. Dit word dikwels in 'n iteratiewe benadering geïmplementeer deur 'n LIFO-waglys (d.w.s. 'n stapel) te gebruik. Vir baie groot doolhowe is die gebruik van rekursie meer geneig om tot oproepstapeloorloop te lei, afhangende van die programmeertaal en beskikbare geheue. 'n LIFO-waglys kan makliker aangepas word om groot hoeveelhede data te hanteer, selfs om die waglys op skyf of in 'n databasis te hou as die beskikbare geheue onvoldoende is.


Hoe dit werk

Die algoritme werk met behulp van 'n stapelgebaseerde diepte-eerste soekbenadering. Hier is die stap-vir-stap uiteensetting:

  1. Kies 'n beginsel en merk dit as besoek.
  2. Terwyl daar onbesoekte selle is: Kyk na die aangrensende selle wat nog nie besoek is nie. Indien ten minste een onbesoekte buurman bestaan: Kies lukraak een van die onbesoekte bure. Verwyder die muur tussen die huidige sel en die gekose buurman. Beweeg na die gekose buurman en merk dit as besoek. Stoot die huidige sel op die stapel. Indien geen onbesoekte bure bestaan nie: Gaan terug deur die laaste sel van die stapel te verwyder.
  3. Gaan voort met hierdie proses totdat die stapel leeg is.

'n Interessante feit oor hierdie algoritme is dat dit beide as 'n doolhofgenerator en as 'n doolhofoplosser werk. As jy dit op 'n reeds gegenereerde doolhof laat loop en net stop wanneer jy die besluite eindpunt bereik, sal die stapel die oplossing vir die doolhof bevat.

Ek het eintlik twee weergawes van hierdie algoritme in werking op hierdie webwerf: 'n LIFO-waglys-gebaseerde een vir die generering van doolhowe op hierdie bladsy en 'n rekursie-gebaseerde een vir die oplos van doolhowe, ook doolhowe wat deur ander algoritmes gegenereer word (dis hoe die kaarte met die oplossings gemaak word). Om twee verskillende weergawes te hê is net vir sport, want ek is 'n nerd wat dit interessant vind, enigeen kon vir albei gewerk het ;-)

Verdere Leeswerk

As jy hierdie plasing geniet het, sal jy dalk ook van hierdie voorstelle hou:


Deel op BlueskyDeel op FacebookDeel op LinkedInDeel op TumblrDeel op XDeel op LinkedInSpeld op Pinterest

Mikkel Christensen

Oor die skrywer

Mikkel Christensen
Mikkel is die skepper en eienaar van miklix.com. Hy het meer as 20 jaar ondervinding as 'n professionele rekenaarprogrammeerder/sagteware-ontwikkelaar en is tans voltyds in diens van 'n groot Europese IT-korporasie. Wanneer hy nie blog nie, spandeer hy sy vrye tyd aan 'n groot verskeidenheid belangstellings, stokperdjies en aktiwiteite, wat tot 'n mate weerspieël kan word in die verskeidenheid onderwerpe wat op hierdie webwerf gedek word.