Miklix

Rekurzivní Backtracker Maze Generator

Vydáno: 16. února 2025 v 18:15:55 UTC
Poslední aktualizace: 12. ledna 2026 v 9:02:04 UTC

Generátor bludišť využívající rekurzivní algoritmus backtracker k vytvoření dokonalého bludiště. Tento algoritmus má tendenci vytvářet bludiště s dlouhými, klikatými chodbami a velmi dlouhým, klikatým řešením.

Tato stránka byla strojově přeložena z angličtiny, aby byla přístupná co největšímu počtu lidí. Strojový překlad bohužel ještě není dokonalá technologie, takže může dojít k chybám. Pokud si přejete, můžete si prohlédnout původní anglickou verzi zde:

Recursive Backtracker Maze Generator

Rekurzivní algoritmus backtracker je ve skutečnosti univerzální prohledávání do hloubky. Při použití pro generování bludišť je mírně upraven tak, aby vybíral cestu náhodně, zatímco při použití pro skutečné prohledávání by se obvykle prohledávala každá úroveň v lineárním pořadí. Má tendenci vytvářet bludiště s dlouhými, klikatými chodbami a velmi dlouhým, klikatým řešením.

Dokonalé bludiště je bludiště, ve kterém existuje přesně jedna cesta z kteréhokoli bodu bludiště do kteréhokoli jiného bodu. To znamená, že nemůžete skončit v kruhu, ale často narazíte na slepé uličky, které vás donutí se otočit a vrátit se zpět.

Zde vygenerované mapy bludiště obsahují výchozí verzi bez počátečních a cílových pozic, takže si je můžete určit sami: z jakéhokoli bodu v bludišti do jakéhokoli jiného bodu existuje řešení. Pokud se chcete inspirovat, můžete zapnout navrhovanou startovní a cílovou pozici - a dokonce si prohlédnout řešení mezi nimi.


Generování nového bludiště








Rekurzivní algoritmus backtrackeru je metoda prohledávání do hloubky pro generování dokonalých bludišť (bludišť bez smyček a s jedinou cestou mezi libovolnými dvěma body). Je jednoduchá, efektivní a vytváří vizuálně přitažlivá bludiště s dlouhými, klikatými chodbami.

Navzdory svému názvu nemusí být nutně implementována pomocí rekurze. Často se implementuje iterativním přístupem s použitím fronty LIFO (tj. zásobníku). U velmi velkých bludišť je pravděpodobnější, že použití rekurze povede k přetečení zásobníku volání, v závislosti na programovacím jazyce a dostupné paměti. Frontu LIFO lze snáze přizpůsobit pro zpracování velkého množství dat, a to i v případě, že není k dispozici dostatek paměti, a dokonce ji uchovat na disku nebo v databázi.


Jak to funguje

Algoritmus pracuje s využitím přístupu prohledávání do hloubky založeného na zásobníku. Zde je podrobný popis:

  1. Vyberte počáteční buňku a označte ji jako navštívenou.
  2. Dokud existují nenavštívené buňky: Podívejte se na sousední buňky, které dosud nebyly navštíveny. Pokud existuje alespoň jeden nenavštívený soused: Náhodně vyberte jednoho z nenavštívených sousedů. Odstraňte zeď mezi aktuální buňkou a vybraným sousedem. Přejděte k vybranému sousedovi a označte ho jako navštíveného. Vložte aktuální buňku na zásobník. Pokud neexistují žádní nenavštívení sousedé: Vraťte se zpět odebráním poslední buňky ze zásobníku.
  3. V tomto postupu pokračujte, dokud se zásobník nevyprázdní.

Zajímavostí tohoto algoritmu je, že funguje jak jako generátor bludišť, tak i jako jeho řešitel. Pokud jej spustíte na již vygenerovaném bludišti a zastavíte ho v okamžiku dosažení určeného koncového bodu, zásobník bude obsahovat řešení bludiště.

Na tomto webu mám ve skutečnosti dvě verze tohoto algoritmu: verzi založenou na frontě LIFO pro generování bludišť na této stránce a verzi založenou na rekurzi pro řešení bludišť, a také bludišť generovaných jinými algoritmy (tak se vytvářejí mapy s řešeními). Dvě různé verze jsou jen pro sport, protože jsem nerd, kterého to zajímá, každá by mohla fungovat pro obě ;-)

Další čtení

Pokud se vám tento příspěvek líbil, mohly by se vám líbit i tyto návrhy:


Sdílet na BlueskySdílejte na FacebookuSdílet na LinkedInSdílet na TumblrSdílet na XSdílet na LinkedInPřipnout na Pinterest

Mikkel Christensen

O autorovi

Mikkel Christensen
Mikkel je tvůrcem a majitelem webu miklix.com. Má více než 20 let zkušeností jako profesionální programátor/vývojář softwaru a v současné době pracuje na plný úvazek pro velkou evropskou IT společnost. Pokud zrovna nepíše blog, věnuje svůj volný čas široké škále zájmů, koníčků a aktivit, což se může do jisté míry odrážet v rozmanitosti témat na tomto webu.