Miklix

Kruskalov generátor bludísk algoritmov

Publikované: 16. februára 2025 o 18:00:13 UTC
Posledná aktualizácia: 12. januára 2026 o 8:59:23 UTC

Generátor bludiska využívajúci Kruskalov algoritmus na vytvorenie dokonalého bludiska. Tento algoritmus má tendenciu vytvárať bludiská so stredne dlhými chodbami a mnohými slepými uličkami, ako aj s pomerne priamym riešením.

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:

Kruskal's Algorithm Maze Generator

Kruskalov algoritmus je algoritmus minimálnej kostry, ktorý je možné prispôsobiť na generovanie bludísk. Je obzvlášť účinný na vytváranie dokonalých bludísk. Alternatívou ku Kruskalovmu algoritmu je Primov algoritmus, ktorý je tiež algoritmom minimálnej kostry, ale keďže generujú identické bludiská a Kruskalov algoritmus beží rýchlejšie, neobťažoval som sa implementovať Primov algoritmus.

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 Kruskalovom algoritme

Kruskalov algoritmus vytvoril Joseph Bernard Kruskal ml., americký matematik, štatistik a informatik. Prvýkrát ho opísal v roku 1956 vo svojej práci „O najkratšom rozprestierajúcom podstrome grafu a probléme obchodného cestujúceho“.

Algoritmus je navrhnutý tak, aby našiel minimálnu kostru (MST) grafu, pričom zabezpečí, že všetky vrcholy sú spojené s minimálnou možnou celkovou hmotnosťou hrán a zároveň sa vyhne cyklom.

Ako funguje Kruskalov algoritmus pre generovanie bludiska

Krok 1: Inicializácia

  • Každú bunku v bludisku považujte za samostatnú množinu (jedinečný komponent).
  • Vypíšte všetky steny medzi susednými bunkami ako potenciálne hrany.

Krok 2: Zoraďte steny

  • Zamiešajte alebo náhodne usporiadajte steny. Ak to implementujete ako skutočný Kruskalov algoritmus, zoraďte steny v náhodnom poradí (pretože generovanie bludiska nevyžaduje váhy).

Krok 3: Spracovanie stien

  • Prejdite cez zamiešané steny.
  • Ak dve bunky rozdelené stenou patria do rôznych množín (t. j. ešte nie sú spojené v bludisku), odstráňte stenu a zlúčte množiny.
  • Ak sú už v rovnakej sade, preskočte stenu (aby ste sa vyhli cyklom).

Krok 4: Pokračujte až do dokončenia

  • Tento postup opakujte, kým nebudú všetky bunky prepojené a vytvoria jeden spanning tree.
  • Nakoniec je každá bunka prepojená s ostatnými bez slučiek alebo izolovaných úsekov.

Keďže Kruskalov algoritmus sa spolieha na zlučovanie množín, je možné ho optimalizovať pomocou algoritmu Union-Find, ktorý poskytuje efektívny spôsob sledovania prepojených buniek počas generovania bludiska. Moju implementáciu algoritmu Union-Find v PHP si môžete pozrieť tu: Odkaz

Ď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.