Lösen des Schiebespiels mittels Dijkstra-Algorithmus

Spielbeschreibung:

Beim Schiebespiel werden in der Regel flache Steine entlang bestimmter Routen (in der Regel auf einem Brett) hin- und hergeschoben, bis ein gewisser Endzustand erreicht ist. Das bekannteste Schiebespiel ist wohl das 15-Puzzle. Im Gegensatz zu anderen mechanischen Geduldspielen verbietet ein Schiebespiel das Hochheben der Spielsteine vom Brett. Diese Eigenschaft unterscheidet Schiebepuzzles von Zusammensetzspielen. Daher ist das Finden von Zugpfaden, die sich durch jede Bewegung im zweidimensionalen Raum eröffnen, wichtige Bestandteile beim Lösen eines Schiebespiels. (Quelle engl. Wikipedia)

Click for high resolution picture

Ziel des hier gezeigten Schiebespiels ist es den 2x2-großen Stein mittig an den unteren Rand zu schieben.

Prinzip des Lösungsalgorithmus:

Der hier verwendete Algorithmus basiert auf den in der Graphen-Theory wohlbekannten Dijkstra-Algorithmus. In der Mathematik sowie in der Informatik versteht man unter einem Graphen eine Menge von Knoten und Kanten. Die Kanten verbinden dabei Paare von Knoten. Jedem Knoten und jeder Kante ist ein einzelner Wert oder eine ganze Reihe von Eigenschaften zugeordnet. In unserem Fall stellt jeder Knoten einen eindeutigen Zustand dar, während die Kanten jeweils zwei Zustände verbinden, die durch Verschieben eines einzelnen Steines über die Distanz eines Feldes ineinander umgewandelt werden können. Das Schiebespiel im obigen Bild hat 65880 eindeutige Zustände. Eindeutig ist hier so gemeint, dass z.B. die Vertauschung der Steine 9 und 10 den Zustand nicht ändert.

Click for high resolution picture

Zum Finden einer Lösung sind folgende drei Schritte durchzuführen:
• Finden aller eindeutigen Zustände und diese in einer Liste von Knoten abspeichern
• Finden aller verbundenen Zustände und Abspeichern in einer Liste von Kanten
• Finden des kürzesten Weges zwischen dem Anfangs-und Endzustand mittels Dijkstra-Algorithmus

Benutzeroberfläche:

Das folgende Bild zeigt den Dialog zur Definition von Anfangs- und Endzustand.

Click for high resolution picture

Das Schiebespiel kann manuell gelöst werden, ...

Click for high resolution picture

... aber auch automatisch mithilfe des oben beschriebenen Algorithmus.

Click for high resolution picture

Downloads:

Exe-Datei und Standardproblemstellungen:
SlidingGame_Executable_ver1.0.zip (Version 1.0, 1. Jan 2019, Win10, DirectX 11)

Quellcode:
GitHub repositories Traga 2 and weaselLibrary

Dokumentation:
Lösung des Schiebespiels.pdf (1. Dez 2009)