Miklix

Rekursyvus Backtracker labirinto generatorius

Paskelbta: 2025 m. vasario 16 d. 18:16:16 UTC
Paskutinį kartą atnaujinta: 2026 m. sausio 12 d. 09:02:11 UTC

Labirintų generatorius, naudojantis rekursinį atgalinio sekimo algoritmą, siekiant sukurti tobulą labirintą. Šis algoritmas linkęs kurti labirintus su ilgais, vingiuotais koridoriais ir labai ilgu, vingiuotu sprendimu.

Šis puslapis buvo mašininiu būdu išverstas iš anglų kalbos, kad juo galėtų naudotis kuo daugiau žmonių. Deja, mašininis vertimas dar nėra tobula technologija, todėl gali pasitaikyti klaidų. Jei pageidaujate, originalią versiją anglų kalba galite peržiūrėti čia:

Recursive Backtracker Maze Generator

Rekursinis atgalinio sekimo algoritmas iš tiesų yra bendrosios paskirties paieška gylyje. Kai naudojamas labirintui generuoti, jis yra šiek tiek modifikuotas, kad kelias būtų pasirinktas atsitiktinai, o jei naudojamas faktinės paieškos tikslais, paprastai kiekviename lygyje būtų ieškoma tiesine tvarka. Jis paprastai sukuria labirintus su ilgais, vingiuotais koridoriais ir labai ilgu, vingiuotu sprendimu.

Tobulasis labirintas - tai labirintas, kuriame iš bet kurio labirinto taško į bet kurį kitą tašką veda lygiai vienas kelias. Tai reiškia, kad negalite eiti ratu, bet dažnai susidursite su aklavietėmis, todėl būsite priversti apsisukti ir grįžti atgal.

Čia sukurtuose labirinto žemėlapiuose yra numatytoji versija be pradžios ir pabaigos pozicijų, todėl jas galite nustatyti patys: iš bet kurio labirinto taško į bet kurį kitą tašką bus rastas sprendimas. Jei norite įkvėpimo, galite įjungti siūlomą pradžios ir pabaigos padėtį ir net pamatyti sprendimą tarp šių dviejų padėčių.


Sukurti naują labirintą








Rekursinis atgalinio sekimo algoritmas yra gylio paieškos metodas, skirtas tobuliems labirintams (labirintams be kilpų ir vienam keliui tarp bet kurių dviejų taškų) generuoti. Jis yra paprastas, efektyvus ir sukuria vizualiai patrauklius labirintus su ilgais, vingiuotais koridoriais.

Nepaisant pavadinimo, jis nebūtinai turi būti įgyvendinamas naudojant rekursiją. Jis dažnai įgyvendinamas iteraciniu metodu, naudojant LIFO eilę (t. y. steko struktūrą). Labai dideliems labirintams, naudojant rekursiją, yra didesnė tikimybė, kad iškvietimų stekas bus perpildytas, priklausomai nuo programavimo kalbos ir laisvos atminties. LIFO eilę galima lengviau pritaikyti dideliems duomenų kiekiams tvarkyti, netgi išlaikant eilę diske arba duomenų bazėje, jei nepakanka laisvos atminties.


Kaip tai veikia

Algoritmas veikia naudodamas steku pagrįstą giluminės paieškos metodą. Štai nuoseklus aprašymas:

  1. Pasirinkite pradinę ląstelę ir pažymėkite ją kaip aplankytą.
  2. Kol yra neaplankytų langelių: pažiūrėkite į kaimynines langelius, kurie dar nebuvo aplankyti. Jei yra bent vienas neaplankytas kaimynas: atsitiktinai pasirinkite vieną iš neaplankytų kaimynų. pašalinkite sieną tarp dabartinės ir pasirinktos langelių. pereikite prie pasirinktos kaimyninės vietos ir pažymėkite ją kaip aplankytą. įstumkite dabartinę langelį į krūvą. Jei neaplankytų kaimynų nėra: grįžkite atgal, išimdami paskutinę langelį iš krūvos.
  3. Tęskite šį procesą, kol krūva bus tuščia.

Įdomus šio algoritmo faktas yra tai, kad jis veikia ir kaip labirinto generatorius, ir kaip labirinto sprendėjas. Jei jį paleisite jau sugeneruotame labirinte ir tiesiog sustabdysite, kai pasieksite nustatytą galinį tašką, steke bus labirinto sprendimas.

Šioje svetainėje iš tikrųjų turiu dvi šio algoritmo versijas: LIFO eile pagrįstą, skirtą labirintų generavimui šiame puslapyje, ir rekursinę, skirtą labirintų sprendimui, taip pat labirintų, generuojamų kitų algoritmų (taip sudaromi žemėlapiai su sprendimais). Dvi skirtingos versijos skirtos tik sportui, nes esu mėgėjas, kuriam tai įdomu, bet kuri galėjo tikti abiem ;-)

Papildoma literatūra

Jei jums patiko šis įrašas, jums taip pat gali patikti šie pasiūlymai:


Pasidalinkite „Bluesky“.Dalintis FacebookBendrinkite „LinkedIn“.Bendrinkite „Tumblr“.Dalintis XBendrinkite „LinkedIn“.Prisegti prie Pinterest

Mikkel Christensen

Apie autorių

Mikkel Christensen
Mikkelis yra miklix.com kūrėjas ir savininkas. Jis turi daugiau nei 20 metų profesionalaus kompiuterių programuotojo ir programinės įrangos kūrėjo patirtį ir šiuo metu visą darbo dieną dirba didelėje Europos IT korporacijoje. Kai jis nerašo tinklaraščio, laisvalaikį skiria įvairiems interesams, pomėgiams ir užsiėmimams, kurie tam tikra prasme gali atsispindėti šioje svetainėje nagrinėjamų temų įvairovėje.