Miklix

Rekurzivní Backtracker Maze Generator

Vydáno: 16. února 2025 v 18:15:55 UTC

Generátor bludiště pomocí algoritmu rekurzivního backtrackeru 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, kroucený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

Algoritmus rekurzivního zpětného sledování je ve skutečnosti obecným účelem prohledávání do hloubky. Při použití pro generování bludiště se mírně upravil tak, aby cestu vybral náhodně, zatímco při použití pro skutečné účely hledání by člověk typicky prohledával každou úroveň v lineárním pořadí. Má tendenci vytvářet bludiště s dlouhými, klikatými chodbami a velmi dlouhým, kroucený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ě








Algoritmus rekurzivního zpětného sledování je metoda prohledávání do hloubky pro generování dokonalých bludišť (bludiště bez smyček a jedinou cestou mezi libovolnými dvěma body). Je to 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án pomocí rekurze. Často se implementuje v iterativním přístupu pomocí 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 snadněji přizpůsobit pro zpracování velkého množství dat, a to i ponechat frontu na disku nebo v databázi, pokud není k dispozici dostatek paměti.


Jak to funguje

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

  1. Vyberte počáteční buňku a označte ji jako navštívenou.
  2. Zatímco existují nenavštívené buňky:
    • Podívejte se na sousední cely, které ještě nebyly navštíveny.
    • Pokud existuje alespoň jeden nenavštívený soused:
      • Náhodně si vyberte jednoho z nenavštěvovaných sousedů.
      • Odstraňte zeď mezi aktuální buňkou a vybraným sousedem.
      • Přesuňte se k vybranému sousedovi a označte jej jako navštíveného.
      • Posuňte aktuální buňku do zásobníku.
    • Pokud neexistují žádní nenavštívení sousedé:
      • Zpět vytažením poslední buňky ze zásobníku.
  3. Pokračujte v tomto procesu, dokud není zásobník prázdný.

Zajímavým faktem o tomto algoritmu je, že funguje jak jako generátor bludiště, tak jako luštitel. Pokud jej spustíte na již vygenerovaném bludišti a zastavíte se, když dosáhnete určeného koncového bodu, zásobník bude obsahovat řešení bludiště.

Ve skutečnosti mám na tomto webu ve hře dvě verze tohoto algoritmu: frontu LIFO pro generování bludišť na této stránce a rekurzi založenou na řešení bludišť, také bludišť generovaných jinými algoritmy (tak se tvoří mapy s řešeními). Mít dvě různé verze je jen pro sport, protože jsem blázen, který to považuje za zajímavé, každá by mohla fungovat pro obě ;-)

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

Mikkel Bang Christensen

O autorovi

Mikkel Bang 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.