Miklix

Generator labirinta Kruskalovega algoritma

Objavljeno: 16. februar 2025 ob 6:00:15 pop. UTC
Nazadnje posodobljeno: 12. januar 2026 ob 8:59:23 dop. UTC

Generator labirintov, ki uporablja Kruskalov algoritem za ustvarjanje popolnega labirinta. Ta algoritem ponavadi ustvari labirinte s srednje dolgimi hodniki in številnimi slepimi ulicami, pa tudi dokaj ravno rešitvijo.

Ta stran je bila strojno prevedena iz angleščine, da bi bila dostopna čim večjemu številu ljudi. Žal strojno prevajanje še ni popolna tehnologija, zato lahko pride do napak. Če želite, si lahko izvirno angleško različico ogledate tukaj:

Kruskal's Algorithm Maze Generator

Kruskalov algoritem je algoritem minimalnega razteznega drevesa, ki ga je mogoče prilagoditi za generiranje labirintov. Še posebej je učinkovit za ustvarjanje popolnih labirintov. Alternativa Kruskalovemu algoritmu je Primov algoritem, ki je prav tako algoritem minimalnega razteznega drevesa, vendar ker generirata enake labirinte in Kruskalov teče hitreje, se Primovega nisem trudil implementirati.

Popoln labirint je labirint, v katerem obstaja natanko ena pot od katere koli točke v labirintu do katere koli druge točke. To pomeni, da se ne morete vrteti v krogu, vendar boste pogosto naleteli na slepe ulice, zaradi česar se boste morali obrniti in vrniti nazaj.

Tukaj ustvarjeni zemljevidi labirintov vključujejo privzeto različico brez začetnih in končnih položajev, tako da jih lahko določite sami: iz katere koli točke v labirintu do katere koli druge točke obstaja rešitev. Če želite navdih, lahko omogočite predlagana začetni in končni položaj - in si celo ogledate rešitev med njima.


Ustvarjanje novega labirinta








O Kruskalovem algoritmu

Kruskalov algoritem je ustvaril Joseph Bernard Kruskal ml., ameriški matematik, statistik in računalniški znanstvenik. Algoritem je prvič opisal leta 1956 v svojem članku "O najkrajšem razteznem poddrevesu grafa in problemu potujočega prodajalca".

Algoritem je zasnovan tako, da poišče minimalno raztezno drevo (MST) grafa, pri čemer zagotovi, da so vsa vozlišča povezana z najmanjšo možno skupno težo robov, hkrati pa se izogne ciklom.

Kako deluje Kruskalov algoritem za ustvarjanje labirinta

1. korak: Inicializacija

  • Vsako celico v labirintu obravnavajte kot ločen niz (edinstveno komponento).
  • Kot potencialne robove navedite vse stene med sosednjimi celicami.

2. korak: Razvrstite stene

  • Stene premešajte ali naključno razvrstite. Če ga izvajate kot pravi Kruskalov algoritem, razvrstite stene v naključnem vrstnem redu (ker generiranje labirinta ne zahteva uteži).

3. korak: Obdelava sten

  • Ponavljajte skozi premešane stene.
  • Če dve celici, ki ju ločuje stena, pripadata različnim množicam (tj. še nista povezani v labirintu), odstranite steno in združite množice.
  • Če so že v istem nizu, preskočite steno (da se izognete ciklom).

4. korak: Nadaljujte do zaključka

  • Ta postopek ponavljajte, dokler niso vse celice povezane in tvorijo eno samo raztezno drevo.
  • Na koncu je vsaka celica povezana z drugimi brez zank ali izoliranih odsekov.

Ker Kruskalov algoritem temelji na združevanju množic, ga je mogoče optimizirati z uporabo algoritma Union-Find, ki zagotavlja učinkovit način sledenja povezanim celicam med generiranjem labirinta. Mojo implementacijo algoritma Union-Find v PHP si lahko ogledate tukaj: Povezava

Nadaljnje branje

Če vam je bila ta objava všeč, vam bodo morda všeč tudi ti predlogi:


Delite na BlueskyDelite na FacebookuDelite na LinkedInuDelite na TumblrDelite na XDelite na LinkedInuPripni na Pinterest

Mikkel Christensen

O avtorju

Mikkel Christensen
Mikkel je avtor in lastnik spletne strani miklix.com. Ima več kot 20 let izkušenj kot profesionalni računalniški programer/razvijalec programske opreme in je trenutno za polni delovni čas zaposlen v veliki evropski IT korporaciji. Kadar ne piše bloga, svoj prosti čas posveča številnim interesom, hobijem in dejavnostim, kar se do neke mere odraža v raznolikosti tem na tem spletnem mestu.