Miklix

Kruskalov generátor bludísk algoritmov

Publikované: 16. februára 2025 o 18:00:13 UTC

Generátor bludiska pomocou Kruskalovho algoritmu na vytvorenie dokonalého bludiska. Tento algoritmus má tendenciu vytvárať bludisko so stredne dlhými chodbami a mnohými slepými uličkami, ako aj pomerne rovné riešenie.

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 s minimálnym spanning tree, ktorý je možné prispôsobiť na generovanie bludiska. Je obzvlášť účinný pri vytváraní dokonalých bludísk. Alternatívou ku Kruskalovmu algoritmu je Primov algoritmus, ktorý je tiež minimálnym algoritmom spanning tree, ale keďže generuje identické bludiská a Kruskalove bežia rýchlejšie, neobťažoval som sa implementáciou Primovho algoritmu.

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, Jr., americký matematik, štatistik a počítačový vedec. Algoritmus prvýkrát opísal v roku 1956 vo svojom článku „On the Shortest Spanning Subtree of a Graph and the Traveling Salesman Problem“.

Algoritmus je navrhnutý tak, aby našiel minimálnu kostru (MST) grafu, pričom zaisťuje, že všetky vrcholy sú spojené s minimálnou možnou celkovou hmotnosťou hrany, pričom sa vyhýbajú cyklom.

Ako Kruskalov algoritmus funguje pri vytváraní bludiska

Krok 1: Inicializujte

  • S každou bunkou v bludisku zaobchádzajte ako so samostatnou súpravou (jedinečný komponent).
  • Uveď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í (keďže generovanie bludiska nevyžaduje váhy).

Krok 3: Spracujte steny

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

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

  • Tento postup opakujte, kým nie sú všetky bunky spojené, čím sa vytvorí jeden kostra.
  • Na konci je každá bunka spojená s ostatnými bez slučiek alebo izolovaných sekcií.

Keďže Kruskalov algoritmus sa spolieha na zlučovanie množín, možno ho optimalizovať pomocou algoritmu Union-Find, ktorý poskytuje efektívny spôsob sledovania spojených buniek počas vytvárania bludiska. Moju implementáciu algoritmu Union-Find v PHP si môžete pozrieť tu: Disjoint Set (Union-Find Algorithm) v PHP

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

Mikkel Bang Christensen

O autorovi

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