Miklix

Rekursiivne Backtracker labürindi generaator

Avaldatud: 16. veebruar 2025, kell 18:16:04 UTC

Labürindi generaator, mis kasutab täiusliku labürindi loomiseks rekursiivset tagasijälituse algoritmi. See algoritm kipub looma pikkade käänuliste koridoride ja väga pikkade keerdlahendustega labürinti.

See lehekülg on inglise keelest masintõlgitud, et muuta see võimalikult paljudele inimestele kättesaadavaks. Kahjuks ei ole masintõlge veel täiuslik tehnoloogia, mistõttu võivad esineda vead. Kui soovite, võite vaadata ingliskeelset originaalversiooni siin:

Recursive Backtracker Maze Generator

Rekursiivne backtracker algoritm on tõesti üldotstarbeline sügavus-esimene otsing. Kui seda kasutatakse labürindi genereerimiseks, muudeti seda veidi, et valida tee juhuslikult, samas kui tegelikuks otsinguks kasutati, otsitakse tavaliselt igal tasandil lineaarses järjekorras. See kipub tekitama pikkade käänuliste koridoride ja väga pikkade keerdlahendustega labürinti.

Täiuslik labürint on labürint, kus on täpselt üks tee labürindi mis tahes punktist mis tahes teise punkti. See tähendab, et te ei saa sattuda ringiratastesse, kuid sageli satute ummikteedesse, mis sunnib teid ümber pöörama ja tagasi minema.

Siin genereeritud labürindi kaardid sisaldavad vaikimisi versiooni ilma algus- ja lõpp-punktideta, nii et saate need ise otsustada: labürindi mis tahes punktist mis tahes teise punkti on olemas lahendus. Kui soovite inspiratsiooni, saate lubada soovitatud algus- ja lõpupositsiooni - ja isegi näha lahendust nende kahe vahel.


Uue labürindi loomine








Rekursiivne tagasijälituse algoritm on sügavus-esimene otsingumeetod täiuslike labürindite (ilma silmusteta labürindid ja ühe tee kahe punkti vahel) loomiseks. See on lihtne, tõhus ja loob visuaalselt atraktiivsed pikkade käänuliste koridoridega labürindid.

Vaatamata oma nimele ei pea seda tingimata rakendama rekursiooni abil. Seda rakendatakse sageli iteratiivse lähenemisega, kasutades LIFO järjekorda (st pinu). Väga suurte labürindi puhul põhjustab rekursiooni kasutamine suurema tõenäosusega kõnepinu ületäitumist, olenevalt programmeerimiskeelest ja vabast mälust. LIFO järjekorda saab hõlpsamini kohandada suurte andmemahtude käitlemiseks, isegi järjekorra hoidmiseks kettal või andmebaasis, kui saadaolevast mälust ei piisa.


Kuidas see töötab

Algoritm töötab virnapõhise sügavus-eesotsingu lähenemisviisi abil. Siin on samm-sammuline jaotus:

  1. Valige alguslahter ja märkige see külastatuks.
  2. Kuigi on külastamata lahtreid:
    • Vaadake naaberrakke, mida pole veel külastatud.
    • Kui on olemas vähemalt üks külastamata naaber:
      • Valige juhuslikult üks külastamata naabritest.
      • Eemaldage sein praeguse lahtri ja valitud naabri vahel.
      • Liikuge valitud naabri juurde ja märkige see külastatuks.
      • Lükake praegune lahter virnale.
    • Kui külastamata naabreid pole:
      • Tagasi liikumiseks hüppab virna viimane lahter.
  3. Jätkake seda protsessi, kuni virn on tühi.

Huvitav fakt selle algoritmi kohta on see, et see töötab nii labürindi generaatorina kui ka labürindi lahendajana. Kui käivitate selle juba loodud labürindis ja peatute otsustatud lõpp-punkti jõudmisel, sisaldab virn labürindi lahendust.

Mul on sellel saidil tegelikult mängus kaks versiooni sellest algoritmist: LIFO järjekord, mis põhineb sellel lehel labürindite genereerimiseks ja rekursioonipõhine labürindite lahendamiseks, samuti muude algoritmide poolt genereeritud labürindid (nii tehakse lahendustega kaardid). Kaks erinevat versiooni on mõeldud ainult sportimiseks, sest ma olen nohik, kellele see tundub huvitav, kumbki oleks võinud mõlema jaoks sobida ;-)

Jagage Bluesky'sJaga FacebookisJagage LinkedInisJaga TumblrisJaga X-isJagage LinkedInisKinnitage Pinterestis

Mikkel Bang Christensen

Autorist

Mikkel Bang Christensen
Mikkel on miklix.com looja ja omanik. Tal on üle 20 aasta kogemust professionaalse programmeerija/tarkvaraarendajana ning praegu töötab ta täiskohaga suures Euroopa IT-ettevõttes. Kui ta ei kirjuta blogi, veedab ta oma vaba aega mitmesuguste huvide, hobide ja tegevustega, mis võib mingil määral kajastuda sellel veebisaidil käsitletavate teemade mitmekesisuses.