Schachburg-Archiv: Benutzerthema „Springerproblem“

schachburg.de

Beitrag von schmiddy355

Hallo zusammen,ich bin neu in diesem Forum und ein sich outender Nicht-Schachspieler. Im Kontext einer Programmieraufgabe habe ich folgendes Schachproblem zu loesen:SpringerproblemErmittlung aller Stellungen auf einem Schachbrett (der normalen Groesse 8x8), bei denen nur je ein weisser und ein schwarzer Springer frei so positioniert sind, dass diese sich gegenseitig bedrohen.Ich habe schon einige Zeit im Internet auf den unterschiedlichen Schachseiten verbracht aber noch keine fuer mich verstaendliche Loesung gefunden. Vielleicht koennt Ihr mir weiterhelfen. Es wuerde mir schon ausreichen, wenn Ihr mir eine Stellung erklaert. Den Rest kann ich mir dann wahrscheinlich herleiten. Danke im Voraus!Viele Gruesse schmiddy355

Beitrag von ToBeFree

Willkommen bei uns :)"Bedrohen" bedeutet in dem Fall einfach nur, dass beiden Springer sich sozusagen "im Weg stehen". Dort, wo eigentlich der weiße Springer hin springen könnte, steht der schwarze Springer. Da der schwarze Springer die gleiche Bewegung ausführen kann, "bedroht" er auch den weißen Springer.Kennst du "Mensch ärgere dich nicht"? Da kann man gegnerische Figuren schlagen, indem man auf ihr Feld zieht. Im Schach funktioniert das genau so, und daher ist diese Stellung eine "Bedrohung" für die gegnerische Figur.Im Wikipedia-Artikel zum "Springer (Schach)" ist ein Schachbrett abgebildet, das die Zugmöglichkeiten eines Springers verdeutlichen soll. Der Springer bewegt sich wie der Buchstabe "L". Dabei darf er auch andere Figuren überspringen, aber das ist für diese Aufgabe irrelevant. Figuren der gleichen Farbe darf man nicht schlagen, aber auch diese gibt es bei deiner Aufgabe nicht. Das einzige Hindernis des Springers in deiner Aufgabe ist der Rand des Schachbretts.[Hier befand sich ein Link auf die Seite "https://de.wikipedia.org/wiki/Springer_(Schach)". Der Link wurde vom Benutzer mit dem Titel "https://de.wikipedia.org/wiki/Springer_(Schach)" versehen. Aus urheberrechtlichen Gründen ist es möglicherweise erforderlich, diesen Hinweis beizubehalten, da manche Benutzer die Quelle ihrer Zitate von anderen Internetseiten so gekennzeichnet haben. Dieser Hinweis wurde automatisch an Stelle des früheren Links platziert. Falls der Link unangemessen oder ohnehin unerreichbar geworden ist, kann die im Impressum genannte Adresse mit einer Bitte um Entfernung kontaktiert werden.]Solange also nicht durch den Brettrand bestimmte Züge unmöglich gemacht werden, hat der schwarze Springer auf dem leeren Brett genau 8 Zugmöglichkeiten. Wenn du auf einem dieser Felder einen weißen Springer platzierst, hast du eine der gewünschten Stellungen für deine Aufgabe.Wenn du die Aufgabe korrekt gelöst hast, müsstest du nach dem folgenden Diagramm...[IMG][Hier befand sich ein Link auf die Seite "https://upload.wikimedia.org/wikipedia/commons/thumb/6/64/Knight%27s_graph_showing_number_of_possible_moves.svg/500px-Knight%27s_graph_showing_number_of_possible_moves.svg.png". Der Link wurde vom Benutzer mit dem Titel "https://upload.wikimedia.org/wikipedia/ ... es.svg.png" versehen. Aus urheberrechtlichen Gründen ist es möglicherweise erforderlich, diesen Hinweis beizubehalten, da manche Benutzer die Quelle ihrer Zitate von anderen Internetseiten so gekennzeichnet haben. Dieser Hinweis wurde automatisch an Stelle des früheren Links platziert. Falls der Link unangemessen oder ohnehin unerreichbar geworden ist, kann die im Impressum genannte Adresse mit einer Bitte um Entfernung kontaktiert werden.][/IMG]([Hier befand sich ein Link auf die Seite "https://de.wikipedia.org/wiki/Datei:Knight%27s_graph_showing_number_of_possible_moves.svg". Der Link wurde vom Benutzer mit dem Titel "https://de.wikipedia.org/wiki/Datei:Knight%27s_graph_showing_number_of_possible_moves.svg" versehen. Aus urheberrechtlichen Gründen ist es möglicherweise erforderlich, diesen Hinweis beizubehalten, da manche Benutzer die Quelle ihrer Zitate von anderen Internetseiten so gekennzeichnet haben. Dieser Hinweis wurde automatisch an Stelle des früheren Links platziert. Falls der Link unangemessen oder ohnehin unerreichbar geworden ist, kann die im Impressum genannte Adresse mit einer Bitte um Entfernung kontaktiert werden.])...die folgende Anzahl von Stellungen erhalten:[FONT=Lucida Console]

Code: Alles auswählen

 2+3+4+4+4+4+3+2+3+4+6+6+6+6+4+3+4+6+8+8+8+8+6+4+4+6+8+8+8+8+6+4+4+6+8+8+8+8+6+4+4+6+8+8+8+8+6+4+2+3+4+4+4+4+3+2+3+4+6+6+6+6+4+3
[/FONT][url]http://www.wolframalpha.com/input/?i=2%2B3%2B4%2B4%2B4%2B4%2B3%2B2%2B3%2B4%2B6%2B6%2B6%2B6%2B4%2B3%2B4%2B6%2B8%2B8%2B8%2B8%2B6%2B4%2B4%2B6%2B8%2B8%2B8%2B8%2B6%2B4%2B4%2B6%2B8%2B8%2B8%2B8%2B6%2B4%2B4%2B6%2B8%2B8%2B8%2B8%2B6%2B4%2B2%2B3%2B4%2B4%2B4%2B4%2B3%2B2%2B3%2B4%2B6%2B6%2B6%2B6%2B4%2B3[/url]Das sind also 336 mögliche Stellungen. Zum Ermitteln wurde einfach der schwarze Springer nacheinander auf jedem einzelnen Feld platziert, und dann der weiße Springer nacheinander auf jedes seiner möglichen Zugfelder gesetzt. Das sind zwei ineinander verschachtelte for-Schleifen, oder wie das auch immer in deiner Programmiersprache heißt. Die äußere Schleife durchwandert das Brett, die innere geht die Zugfelder durch. Um dein Programm weniger hässlich aussehen zu lassen, kannst du die äußere Schleife nochmal aufteilen. Du brauchst nicht einmal ein Array oder so etwas. Keine Variable muss dauerhaft den Zustand des Schachbretts abspeichern, wenn du jede gefundene Stellung einfach als Text ausgibst.Die Anzahl ist deshalb so leicht zu ermitteln, weil "gegenseitig bedrohen" bei Springern überhaupt nichts besonderes ist. Wenn ein Springer den anderen schlagen kann, dann geht das immer auch andersherum. Damit sind übrigens wirklich alle Möglichkeiten abgedeckt. Komme bloß nicht auf den Gedanken, man könne jetzt noch die Farben vertauschen und erhielte die doppelte Zahl.