Miklix

Generator labirinta Kruskalovega algoritma

Objavljeno: 16. februar 2025 ob 6:00:15 pop. UTC

Generator labirintov z uporabo Kruskalovega algoritma za ustvarjanje popolnega labirinta. Ta algoritem skuša ustvariti labirinte s srednje dolgimi koridorji in številnimi slepimi ulicami, pa tudi precej ravno rešitev.

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 minimalni algoritem vpetega drevesa, ki ga je mogoče prilagoditi za generiranje labirinta. Še posebej je učinkovit pri ustvarjanju popolnih labirintov. Alternativa Kruskalovemu algoritmu je Primov algoritem, ki je tudi minimalni algoritem vpetega drevesa, a ker ustvarjajo enake labirinte in Kruskalov teče hitreje, se nisem trudil implementirati Primovega.

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, mlajši, ameriški matematik, statistik in računalničar. Algoritem je prvič opisal leta 1956 v svojem članku "O najkrajšem vpetem poddrevesu grafa in problemu trgovskega potnika."

Algoritem je zasnovan tako, da najde minimalno vpeto drevo (MST) grafa, pri čemer zagotavlja, da so vse točke povezane z najmanjšo možno skupno težo robov, pri čemer se izogiba ciklom.

Kako deluje Kruskalov algoritem za ustvarjanje labirinta

1. korak: Inicializacija

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

2. korak: Razvrstite stene

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

3. korak: Obdelajte stene

  • Ponavljajte skozi premešane stene.
  • Če celici, ki ju deli stena, pripadata različnima nizoma (tj. še nista povezani v labirintu), odstranite steno in niza združite.
  • Č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 vpeto drevo.
  • Na koncu je vsaka celica povezana z drugimi brez zank ali izoliranih odsekov.

Ker Kruskalov algoritem temelji na združevanju nizov, ga je mogoče optimizirati z uporabo algoritma Union-Find, ki zagotavlja učinkovit način za sledenje povezanim celicam med ustvarjanjem labirinta. Tukaj si lahko ogledate mojo PHP implementacijo algoritma Union-Find: Disjointna množica (algoritem Union-Find) v PHP

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

Mikkel Bang Christensen

O avtorju

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