Symmetrie
Hallo nochmal,
hätte ich mir das Buchstabenfeld etwas genauer angeschaut, wäre mir die hohe Symmetrie aufgefallen; dies hätte mir das Erstellen des C++ Programms erspart. Hier nun also ein etwas eleganteres alternatives Lösungsverfahren:
Zunächst einmal ist das Feld links-rechts-spiegelsymmetrisch. Ich betrachte zunächst nur die rechte Seite (einschließlich der Mittelspalte). Für diese rechte Seite gilt, das jede korrekte Lösung aus einer Folge von Schritten nach rechts ® oder nach unten (u) besteht. Zum Beispiel (u,u,r,u,r,r,u,u,u,r). Aufgrund der Geometrie des Feldes sind aber nicht beliebige solcher Folgen erlaubt. Zum Beispiel scheidet die Folge (r,r,r,r,r,r,r,r,r) aus. Allgemein gilt, dass die Anzahl der r-Schritte höchstens so groß sein darf wie die bisherigen u-Schritte.
Als nächstes stellt man fest, dass jede Lösungsfolge auf einem Randfeld (rechter unterer Rand) endet und jedes Randfeld des rechten unteren Randes das Ende einer Lösung ist (Aussage 1).
Mein Plan ist es nun, jedem Feld eine Zahl zuzuordnen. Diese Zahl soll die Anzahl der möglichen Verzweigungen angeben, die es von jenem Feld aus gibt. Wegen der Aussage 1 erhalten die 6 Randfelder des linken unteren Randes jeweils eine 1:
---
--- ---
--- --- ---
--- --- --- ---
--- --- --- --- ---
--- --- --- --- --- -1-
--- --- --- --- -1-
--- --- --- -1-
--- --- -1-
--- -1-
-1-
Da nur Schritte nach unten und nach rechts zu Lösungen führen, ist die Zahl eines jeden Feldes bestimmt durch die Summe der Zahlen rechts und unterhalb des Feldes. Man kann also Schritt für Schritt die restlichen Felder ausfüllen:
---
--- ---
--- --- ---
--- --- --- ---
--- --- --- --- ---
--- --- --- --- -2- -1-
--- --- --- -2- -1-
--- --- -2- -1-
--- -2- -1-
-2- -1-
-1-
und so weiter, bis schließlich herauskommt:
252
252 -70
182 -70 -20
112 -50 -20 -6-
-62 -30 -14 -6- -2-
-32 -16 -8- -4- -2- -1-
-16 -8- -4- -2- -1-
-8- -4- -2- -1-
-4- -2- -1-
-2- -1-
-1-
Aufgrund der Spiegelsymmetrie gilt dies entsprechend für die linke Seite des Feldes. Die Gesamtzahl der Lösungen ist also durch das um 1 verminderte Doppelte der Zahl 252 gegeben. Um 1 vermindert deshalb, weil der senkrechte Weg (u,u,u,u,u,u,u,u,u,u) sonst doppelt gezählt würde. Als Lösung erhält man also
AnzahlLösungen = 2*252 - 1 = 503
genau wie bereits vom Computer vorhergesagt.
Viele Grüße
Jens