Miklix

Ellers algoritm labyrintgenerator

Publicerad: 16 februari 2025 kl. 20:02:13 UTC

Labyrintgenerator som använder Ellers algoritm för att skapa en perfekt labyrint. Denna algoritm är intressant eftersom den bara kräver att den aktuella raden (inte hela labyrinten) lagras i minnet, så den kan användas för att skapa väldigt, väldigt stora labyrinter även på mycket begränsade system.

Denna sida har maskinöversatts från engelska för att göra den tillgänglig för så många som möjligt. Tyvärr är maskinöversättning ännu inte en fulländad teknik, så fel kan uppstå. Om du föredrar det kan du se den engelska originalversionen här:

Eller's Algorithm Maze Generator

Ellers algoritm är en labyrintgenereringsalgoritm som effektivt producerar perfekta labyrinter (labyrinter utan slingor och en enda väg mellan två valfria punkter) med hjälp av en rad-för-rad-metod. Den producerar labyrinter som liknar Kruskals algoritm, men den gör det genom att bara generera en rad i taget, utan att behöva lagra hela labyrinten i minnet. Det gör det användbart för att generera mycket stora labyrinter på mycket begränsade system och för procedurinnehållsgenerering.

En perfekt labyrint är en labyrint där det finns exakt en väg från varje punkt i labyrinten till varje annan punkt. Det betyder att du inte kan gå runt i cirklar, men du kommer ofta att stöta på återvändsgränder, vilket tvingar dig att vända om och gå tillbaka.

De labyrintkartor som genereras här innehåller en standardversion utan några start- och målpositioner, så att du själv kan bestämma dem: det kommer att finnas en lösning från vilken punkt som helst i labyrinten till vilken annan punkt som helst. Om du vill ha inspiration kan du aktivera en föreslagen start- och målposition - och till och med se lösningen mellan de två.


Generera ny labyrint








Om Ellers algoritm

Ellers algoritm introducerades av David Eller.

Algoritmen är känd för sin effektiva rad-för-rad-inställning till labyrintgenerering, vilket gör den idealisk för oändliga labyrinter eller labyrinter som genereras i realtid. Det citeras ofta i procedurinnehållsgenerering och labyrintgenereringslitteratur, men jag har inte kunnat hitta primära källor som beskriver dess ursprungliga publicering.

Hur Ellers algoritm fungerar för Maze Generation

Ellers algoritm bearbetar en rad i taget, underhåller och modifierar uppsättningar av anslutna celler. Den säkerställer anslutning samtidigt som den undviker loopar, och den förlänger effektivt labyrinten nedåt.

Det kan teoretiskt användas för att generera oändliga labyrinter, men för att säkerställa att den genererade labyrinten faktiskt är lösbar, är det nödvändigt att byta till logiken "slutraden" någon gång för att avsluta labyrinten.

Steg 1: Initiera den första raden

  • Tilldela varje cell i raden ett unikt set-ID.

Steg 2: Förena några angränsande celler horisontellt

  • Slå slumpmässigt samman intilliggande celler genom att ställa in dem till samma uppsättnings-ID. Detta säkerställer att det finns horisontella passager.

Steg 3: Skapa vertikala anslutningar till nästa rad

  • För varje uppsättning som visas i raden måste minst en cell anslutas nedåt (för att säkerställa anslutning).
  • Välj slumpmässigt en eller flera celler från varje uppsättning för att ansluta till nästa rad.

Steg 4: Flytta till nästa rad

  • För vidare de vertikala anslutningarna genom att tilldela samma uppsättnings-ID till motsvarande celler nedan.
  • Tilldela nya uppsättnings-ID:n till alla otilldelade celler.

Steg 5: Upprepa steg 2–4 tills sista raden är nådd

  • Fortsätt bearbeta rad för rad.

Steg 6: Bearbeta den sista raden

  • Se till att alla celler i den sista raden tillhör samma uppsättning genom att slå samman eventuella återstående separata uppsättningar.

Dela på BlueskyDela på FacebookDela på LinkedInDela på TumblrDela på XDela på LinkedInFäst på Pinterest

Mikkel Bang Christensen

Om författaren

Mikkel Bang Christensen
Mikkel är skaparen och ägaren av miklix.com. Han har över 20 års erfarenhet som professionell datorprogrammerare/mjukvaruutvecklare och är för närvarande heltidsanställd på ett stort europeiskt IT-bolag. När han inte bloggar ägnar han sin fritid åt en mängd olika intressen, hobbies och aktiviteter, vilket i viss mån kan återspeglas i de olika ämnen som behandlas på den här webbplatsen.