StartseiteAlgorithmen & KILabyrinth-Generator — Recursive Backtracker, Prim, Wilsons Algorithmus

🧩 Labyrinth-Generator — Recursive Backtracker, Prim, Wilsons Algorithmus

Interaktive Labyrinth-Erzeugung mit 4 Algorithmen: Recursive Backtracker (DFS), Randomisierter Prim, Wilson (schleifenfreie Zufallsbewegung) und Kruskal. Sieh zu, wie Labyrinthe in Echtzeit wachsen, und löse sie danach mit dem kürzesten BFS-Weg.

Algorithmen & KI3DEinfach60 FPS
maze-generator ↗ Eigenständig öffnen

Über den Labyrinth-Generator

Ein perfektes Labyrinth ist ein zusammenhängender Graph ohne Schleifen, in dem es genau einen Weg zwischen zwei beliebigen Zellen gibt — mathematisch äquivalent zu einem Spannbaum des Rastergraphen. Vier klassische Algorithmen erzeugen jeweils perfekte Labyrinthe mit unterschiedlichen statistischen Eigenschaften: der Recursive Backtracker (DFS) erzeugt lange, gewundene Gänge mit wenigen Sackgassen; Prims Algorithmus (beginnend an einer zufälligen Zelle) erzeugt Labyrinthe mit vielen kurzen Zweigen und einer gleichmäßigeren Textur; Kruskals Algorithmus (zufälliges Entfernen von Kanten aus einem minimalen Spannbaum) tendiert zu gleichverteilten Spannbäumen; und Wilsons Algorithmus (schleifenfreie Zufallsbewegungen) erzeugt einen unverzerrten, gleichverteilten Spannbaum mit nachweisbarer Gleichverteilung.

Diese Simulation lässt dich Rastergröße (bis zu 50×50) und Algorithmus wählen und dann zusehen, wie das Labyrinth in Echtzeit entsteht. Die aktive Front jedes Algorithmus ist farblich gekennzeichnet, sodass man leicht erkennt, wie jede Traversierungsstrategie das Raster erkundet und warum die entstehenden Labyrinthe unterschiedliche visuelle Texturen und Lösungswegeigenschaften haben.

Häufig gestellte Fragen

Was macht ein Labyrinth „perfekt"?

Ein perfektes Labyrinth hat genau einen Weg zwischen zwei beliebigen Zellen: Es enthält keine Schleifen und keine isolierten Bereiche — mathematisch ist es ein Spannbaum des Rastergraphen. Das bedeutet, jede Zelle ist erreichbar (vollständig verbunden), und es gibt keine Zyklen, sodass es genau einen Lösungsweg vom Eingang zum Ausgang gibt. Unperfekte Labyrinthe haben Schleifen oder Verflechtungen, die mehrere Lösungen erzeugen und im Spieldesign für unterschiedliche Spielerlebnisse genutzt werden.

Wie funktioniert der Recursive-Backtracker-Algorithmus (DFS)?

Ausgehend von einer zufälligen Zelle markiert DFS sie als besucht, wählt zufällig einen unbesuchten Nachbarn, schnitzt einen Durchgang und rekursiert. Sind alle Nachbarn besucht, geht er zur zuletzt besuchten Zelle mit unbesuchten Nachbarn zurück. Der Algorithmus endet, wenn er zum Start zurückgekehrt ist und keine unbesuchten Zellen mehr übrig sind. Das Ergebnis hat die DFS-Baumstruktur: lange, gewundene Gänge mit relativ wenigen Sackgassen-Zweigen und typischerweise einem einzigen langen Lösungsweg.

Welchen visuellen Unterschied kann ich zwischen Prims und Wilsons Algorithmus erwarten?

Prims Algorithmus wächst von einer einzigen Startzelle aus und wählt immer die zufällige Frontkante mit dem minimalen Gewicht (effektiv eine zufällige Priorität), wodurch Labyrinthe mit kurzen, buschigen, nach außen strahlenden Zweigen entstehen — sie wirken „verwurzelter" und haben viele Sackgassen nahe der Mitte. Wilsons Algorithmus verwendet schleifenfreie Zufallsbewegungen, die gleichverteilte Spannbäume erzeugen (jeder Spannbaum gleich wahrscheinlich), was ein statistisch unverzerrtes Labyrinth mit organischerer, gleichmäßigerer Verteilung der Zweiglängen und ohne Richtungsverzerrung ergibt.

Was ist ein gleichverteilter Spannbaum und warum ist das wichtig?

Ein gleichverteilter Spannbaum (Uniform Spanning Tree, UST) ist ein Spannbaum, der gleichverteilt zufällig aus allen möglichen Spannbäumen eines Graphen ausgewählt wird. Für ein N×N-Raster gibt es astronomisch viele Spannbäume (für große N etwa e^(πN²/3)). Wilsons Algorithmus erzeugt USTs effizient in erwarteter O(N² log N)-Zeit mithilfe schleifenfreier Zufallsbewegungen. USTs haben Verbindungen zur statistischen Physik (das kritische Ising-Modell) und werden in der strengen Untersuchung zufälliger Labyrintheigenschaften verwendet.

Wie schnell ist jeder Labyrinth-Erzeugungsalgorithmus?

Der Recursive Backtracker (DFS) läuft in O(N²)-Zeit und benötigt O(N²) Stapelspeicher (für ein N×N-Raster). Prims Algorithmus mit einer zufälligen Prioritätswarteschlange ist ebenfalls O(N² log N), aber aufgrund cache-freundlichen Zugriffs meist schneller in der tatsächlichen Laufzeit. Kruskals Algorithmus mit einer Union-Find-Struktur läuft in O(N² α(N²)), wobei α die inverse Ackermann-Funktion ist (nahezu linear). Wilsons Algorithmus hat eine erwartete Laufzeit von O(N² log N), aber hohe Varianz durch die Länge der Zufallsbewegungen.

Können Labyrinth-Erzeugungsalgorithmen parallelisiert werden?

DFS ist von Natur aus sequenziell. Kruskals Algorithmus ist am besten parallelisierbar: Die Kanten können parallel gemischt werden, und Union-Find unterstützt bei sorgfältiger Synchronisierung nebenläufige Operationen. Parallele Labyrinth-Erzeugung teilt das Raster meist in rechteckige Regionen auf, erzeugt Labyrinthe innerhalb jeder Region unabhängig voneinander und entfernt dann Wände zwischen den Regionen, um sie zu verbinden — dies erzeugt ein gültiges, aber kein gleichverteiltes Labyrinth. GPU-basierte Labyrinth-Erzeugung nutzt zellularautomatenbasierte Ansätze für maximale Parallelität.

Wie werden Labyrinthe nach der Erzeugung gelöst?

Eine BFS vom Eingang garantiert den kürzesten Weg in einem ungewichteten Rasterlabyrinth, indem sie Zellen Ebene für Ebene besucht, bis der Ausgang gefunden ist. DFS findet einen Weg (nicht notwendigerweise den kürzesten) in O(N²)-Zeit. A* mit euklidischer oder Manhattan-Distanz als Heuristik ist in der Praxis bei großen Labyrinthen schneller. Dijkstras Algorithmus behandelt gewichtete Labyrinthe (z. B. wenn verschiedene Zellen unterschiedliche Durchquerungskosten haben, was Gelände simuliert). Alle drei sind im schlimmsten Fall O(N²) für perfekte Labyrinthe.

Was ist die „Fluss"-Qualität eines Labyrinths?

„Fluss" (auch „Geradeaus-Verzerrung" genannt) misst, wie oft der Gang geradeaus weiterläuft statt abzubiegen. DFS-Labyrinthe haben eine hohe Flussqualität (lange gerade Gänge), da das Zurückverfolgen dazu neigt, in einer Richtung fortzufahren, bis es blockiert ist. Prims Labyrinthe haben eine niedrige Flussqualität (viele Abbiegungen und kurze Läufe). Wilsons UST-Labyrinthe haben eine Flussqualität, die gegen die theoretische Erwartung für zufällige planare Bäume konvergiert, zwischen DFS und Prim liegend.

Gibt es Labyrinth-Algorithmen, die für bestimmte Formen konzipiert sind?

Ja. Der Growing-Tree-Algorithmus verallgemeinert DFS und Prims: Er führt eine Liste aktiver Zellen und wählt die nächste zu erweiternde Zelle aus dieser Liste (neueste = DFS, zufällig = Prim-artig, älteste = BFS). Ellers Algorithmus erzeugt Labyrinthe zeilenweise mit O(N) Speicher, unabhängig von der Labyrinthhöhe, geeignet für Streaming oder unendliche Labyrinthe. Sigma-Labyrinthe (hexagonale Raster) und Theta-Labyrinthe (kreisförmige Raster) verwenden dasselbe Spannbaum-Konzept, angepasst an nicht rechteckige Zellgraphen.

Wie hängen Labyrinth-Algorithmen mit minimalen Spannbäumen zusammen?

Jedes perfekte Labyrinth ist ein Spannbaum des Rastergraphen. Kruskals Labyrinth-Algorithmus ist buchstäblich Kruskals MST-Algorithmus mit zufälligen Kantengewichten (jeder Wand wird eine Zufallszahl zugewiesen). Prims Labyrinth-Algorithmus ist Prims MST mit zufälliger Kantenwahl. Da die Gewichte zufällig sind, erzeugen beide zufällige Spannbäume, jedoch nicht gleichverteilt zufällig — sie haben eine Verzerrung zu kurzen Kanten (Wände neben bereits besuchten Zellen). Wilsons Algorithmus korrigiert diese Verzerrung, um echte USTs zu erzeugen.

Über diese Simulation

Dieser Simulator erzeugt ein „perfektes Labyrinth" — einen Spannbaum des Rasters, bei dem genau ein Weg zwei beliebige Zellen verbindet — mittels Recursive Backtracking (DFS), randomisiertem Prim, Wilsons schleifenfreier Zufallsbewegung oder Kruskals Algorithmus. Nach der Erzeugung löst eine Breitensuche das Labyrinth und hebt die kürzeste Route hervor.

🔬 Was es zeigt

Wände verschwinden nacheinander, während der gewählte Algorithmus das Raster erkundet, sodass du zusehen kannst, wie der Spannbaum Zelle für Zelle wächst. Lösen mit BFS überlagert dann den garantiert kürzesten Weg von Start bis Ziel.

🎮 Anwendung

Wähle einen Algorithmus, stelle Rastergröße (5–60) und Animationsgeschwindigkeit mit den Reglern ein, drücke dann Generieren, um Schritt für Schritt zuzusehen, oder Sofort, um direkt zum fertigen Labyrinth zu springen. Lösen mit BFS zeichnet den kürzesten Weg, sobald ein Labyrinth existiert.

💡 Wusstest du schon?

Wilsons Algorithmus ist der einzige der vier, der einen wirklich gleichverteilten Spannbaum erzeugt — jeder mögliche Baum gleich wahrscheinlich — eine stärkere Garantie als DFS, Prim oder Kruskal, die bestimmte Labyrinthformen bevorzugen.

Häufig gestellte Fragen

Was macht ein Labyrinth „perfekt"?

Ein perfektes Labyrinth hat genau einen Weg zwischen zwei beliebigen Zellen, ohne Schleifen oder getrennte Bereiche — mathematisch ein Spannbaum. Alle vier Algorithmen hier erzeugen immer ein perfektes Labyrinth, nur über unterschiedliche Strategien.

Wie baut der Recursive Backtracker (DFS) ein Labyrinth?

Er bewegt sich wiederholt zu einem zufälligen unbesuchten Nachbarn, entfernt die Wand zwischen ihnen und geht bei Sackgassen zurück. Dies erzeugt lange, gewundene Gänge mit relativ wenigen Verzweigungen, da er vorwärts drängt, bis er zum Abbiegen gezwungen wird.

Warum sehen Prims und Wilsons Labyrinthe anders aus als DFS?

Prims Algorithmus wächst von einer Startzelle aus über zufällige Frontkanten und erzeugt viele kurze Zweige. Wilsons Algorithmus verwendet schleifenfreie Zufallsbewegungen von unbesuchten Zellen, entfernt die Verzerrung zu kurzen Zweigen und erzeugt einen gleichverteilten Spannbaum.

Was findet Lösen mit BFS?

Die Breitensuche erkundet Ebene für Ebene vom Start aus, sodass sie beim ersten Erreichen des Ziels den kürzesten Weg nach Zellenzahl gefunden hat, da jeder Zug gleich viel kostet.

Warum kann Wilsons Algorithmus langsamer wirken?

Seine Zufallsbewegungen können lange umherwandern, bevor sie das wachsende Labyrinth treffen, besonders am Anfang. Diese variable Laufzeit ist der Preis dafür, ein wirklich gleichverteiltes Zufallslabyrinth zu garantieren.

⚙ Unter der Haube

Sieh zu, wie 4 Labyrinth-Algorithmen live entstehen: Recursive Backtracker, Randomisierter Prim, Wilsons schleifenfreie Bewegung und Kruskal. Löse es sofort mit BFS.

Labyrinth-GeneratorRecursive BacktrackingPrim

3D · Three.js / WebGL-Renderer · Ziel 60 FPS · läuft vollständig clientseitig, keine Installation nötig

Was hast du gefunden?

Schritte zur Reproduktion hinzufügen (optional)