Miklix

Ellerov generátor bludísk algoritmov

Publikované: 16. februára 2025 o 20:02:07 UTC
Posledná aktualizácia: 12. januára 2026 o 9:04:15 UTC

Generátor bludiska využívajúci Ellerov algoritmus na vytvorenie dokonalého bludiska. Tento algoritmus je zaujímavý, pretože vyžaduje uchovávanie iba aktuálneho riadku (nie celého bludiska) v pamäti, takže sa dá použiť na vytvorenie veľmi, veľmi veľkých bludísk aj na veľmi obmedzených systémoch.

Táto stránka bola strojovo preložená z angličtiny, aby bola prístupná čo najväčšiemu počtu ľudí. Žiaľ, strojový preklad ešte nie je dokonalá technológia, takže sa môžu vyskytnúť chyby. Ak chcete, môžete si pozrieť pôvodnú anglickú verziu tu:

Eller's Algorithm Maze Generator

Ellerov algoritmus je algoritmus generovania bludísk, ktorý efektívne vytvára dokonalé bludiská (bludiská bez slučiek a s jednou cestou medzi ľubovoľnými dvoma bodmi) pomocou prístupu riadok po riadku. Vytvára bludiská podobné Kruskalovmu algoritmu, ale robí to generovaním iba jedného riadku naraz, bez nutnosti ukladať celé bludisko do pamäte. Vďaka tomu je užitočný na generovanie veľmi veľkých bludísk na veľmi obmedzených systémoch a na generovanie procedurálneho obsahu.

Dokonalé bludisko je bludisko, v ktorom existuje presne jedna cesta z ktoréhokoľvek bodu bludiska do ktoréhokoľvek iného bodu. To znamená, že nemôžete skončiť v kruhu, ale často narazíte na slepé uličky, ktoré vás prinútia otočiť sa a vrátiť sa späť.

Tu vygenerované mapy bludiska obsahujú predvolenú verziu bez počiatočnej a cieľovej pozície, takže si ich môžete určiť sami: z ľubovoľného bodu bludiska do ľubovoľného iného bodu bude existovať riešenie. Ak sa chcete inšpirovať, môžete zapnúť navrhovanú počiatočnú a cieľovú pozíciu - a dokonca si pozrieť riešenie medzi nimi.


Generovanie nového bludiska








O Ellerovom algoritme

Ellerov algoritmus predstavil David Eller.

Tento algoritmus je pozoruhodný svojím efektívnym prístupom k generovaniu bludiska riadok po riadku, vďaka čomu je ideálny pre nekonečné bludiská alebo bludiská generované v reálnom čase. Bežne sa cituje v literatúre o generovaní procedurálneho obsahu a generovaní bludiska, ale nenašiel som primárne zdroje s podrobnosťami o jeho pôvodnej publikácii.

Ako funguje Ellerov algoritmus pre generovanie bludiska

Ellerov algoritmus spracováva jeden riadok po druhom, pričom udržiava a upravuje sady prepojených buniek. Zaisťuje prepojenie, pričom sa vyhýba slučkám a efektívne rozširuje bludisko smerom nadol.

Teoreticky sa dá použiť na generovanie nekonečných bludísk, avšak aby sa zabezpečilo, že vygenerované bludisko je skutočne riešiteľné, je potrebné v určitom bode prepnúť na logiku „posledného riadku“, aby sa bludisko dokončilo.

Krok 1: Inicializácia prvého riadku

  • Priraďte každej bunke v riadku jedinečné ID sady.

Krok 2: Horizontálne spojenie susedných buniek

  • Náhodne zlúčte susedné bunky nastavením rovnakého ID sady. Tým sa zabezpečí, že budú existovať horizontálne priechody.

Krok 3: Vytvorenie vertikálnych spojení s ďalším riadkom

  • Pre každú množinu, ktorá sa objaví v riadku, musí byť aspoň jedna bunka spojená smerom nadol (aby sa zabezpečila konektivita).
  • Každej sady náhodne vyberte jednu alebo viac buniek, ktoré sa pripoja k ďalšiemu riadku.

Krok 4: Prejdite na ďalší riadok

  • Vertikálne prepojenia preneste ďalej priradením rovnakého ID sady zodpovedajúcim bunkám nižšie.
  • Priraďte nové ID množín všetkým nepriradeným bunkám.

Krok 5: Opakujte kroky 2 – 4, kým nedosiahnete posledný riadok

  • Pokračujte v spracovaní riadok po riadku.

Krok 6: Spracovanie posledného riadku

  • Zlúčením všetkých zostávajúcich samostatných množín zabezpečte, aby všetky bunky v poslednom riadku patrili do rovnakej množiny.

Ďalšie čítanie

Ak sa vám tento príspevok páčil, možno sa vám budú páčiť aj tieto návrhy:


Zdieľať na BlueskyZdieľať na FacebookuZdieľať na LinkedInZdieľať na TumblrZdieľať na XZdieľať na LinkedInPripnúť na Pintereste

Mikkel Christensen

O autorovi

Mikkel Christensen
Mikkel je tvorcom a majiteľom miklix.com. Má viac ako 20 rokov skúseností ako profesionálny počítačový programátor/vývojár softvéru a v súčasnosti pracuje na plný úväzok pre veľkú európsku IT korporáciu. Keď práve nepíše blog, venuje svoj voľný čas širokej škále záujmov, koníčkov a aktivít, čo sa môže do istej miery odrážať v rôznorodosti tém na tejto webovej lokalite.