Ich habe kürzlich die Neuveröffentlichung von The Logical Journey of the Zoombinis gespielt und versucht, einige Computeralgorithmen zu implementieren, mit denen die verschiedenen Rätsel gelöst werden können. Ich bin nicht sicher, wie ich mich dem Fährenrätsel von Captain Cajun nähern soll.
Für Unbekannte ist ein Zoombini eine Kreatur mit 4 Attributen: Haar, Augen, Nase und Füße. Jedes dieser Attribute hat 5 mögliche Werte; Zum Beispiel können die Füße eines Zoombini Räder, Rollschuhe, Turnschuhe, eine Feder oder ein Propeller sein. Hier ist ein Beispiel für einen Zoombini mit unordentlichem Haar, Brille, grüner Nase und Turnschuhen:
In dem Fährenrätsel besteht die Aufgabe darin, eine Sammlung von 16 Zoombinis auf den 16 Sitzen einer Fähre zusammenzustellen. Die Anordnung muss der Regel entsprechen, dass zwei orthogonal benachbarte Sitze von Zoombinis belegt werden müssen, die mindestens ein Merkmal gemeinsam haben. Wenn zwei Zoombinis unterschiedliche Haare, unterschiedliche Augen, unterschiedliche Nasen und unterschiedliche Füße haben, sitzen sie möglicherweise nicht nebeneinander.
Die Anordnung der Sitze ändert sich je nach Ebene; Konzentrieren wir uns der Vollständigkeit halber auf die Stufe "Sehr schwer", in der die 16 Sitze in einem 4-mal-4-Raster angeordnet sind. Hier ist ein Beispiel, in dem 15 Zoombinis legal sitzen, aber der letzte auf dem Dock stehende Zoombini nicht auf dem letzten freien Platz platziert werden kann, da sie mit dem Zoombini rechts von ihr keine Funktionen teilen würde:
Es gibt 16! ≈ 21 Billionen mögliche Zuordnungen von Zoombinis zu Sitzen. Durchlaufen Sie einfach alle möglichen Aufträge, um festzustellen, ob dies legal ist. Mit welchen Heuristiken könnte ich dieses Problem sinnvoll angehen?
Subgraph Isomorphism Problem
. Das Problem ist, ein Diagramm in einem anderen Diagramm zu finden. In Ihrem Fall wäre der Subgraph die Sitzordnung (Kanten sind Nachbarn), während der übergeordnete Graph der Zoombinis wäre, bei dem die Verbindungen das Vorhandensein eines gemeinsamen Merkmals wären. Beachten Sie, dass das Problem im Allgemeinen NP-vollständig ist und in der Regel auch durch Rückverfolgung gelöst wird. In einigen Sonderfällen (von denen Ihr Graph sehr gut sein kann) sind jedoch polynomielle oder sogar lineare Lösungen möglich.