Gibt es ein Computerprogramm, das Sudoku-Rätsel lösen kann?

2 Antworten

nicht allzu schwer.
ein 10x10 sudoku kannst du bspw. als 10x10 array speichern.
jeder eintrag stellt eine zelle des soduko spiels dar.
stells dir wie in mathe ne matrix vor.
jede zelle aij steht für den eintrag dort.

gleichermassen, um das ganze zu lösen, kann es sinnvoll sein, im 10x10 array jeden eintrag selbst ein 9er array zu sein.

betrachten wir einfach mal zelle 1,1.
du generierst ein 9er boolean array.
anfangs wird jeder eintrag auf true gesetzt.
das array gibt dir an, welche der zahlen 1-9 in dieser zelle nach aktuellem kenntnisstand möglich ist.

so ein array existiert dann für jede zelle der sudoku matrix.

in jeder "runde" wird dann nach festgelegten regeln geguckt , wo welche zahlen nicht mehr möglich sind und die betroffenen zellen, bzs. deren betreffenden boolean einträge bspw. auf false gesetzt.

denn ganz am ende von allem ist sudoku ein ausschluss prinzip spiel.

du sagst anfangs in allen zellen können alle zahlen vorkommen,
und durch logisches schlussfolgern bzw. einfach nur konsequentes wiederholtes anwenden der einselben regeln schließt du nacheinander alle möglcihen zahlen für die diversen zellen aus.
so lange bis bei einer zelle nur noch eine zahl möglich ist und du damit die lösung für jene zelle kennst.
was natürlcih in der näcjhsten rund e wieder einschränkt was in den anderen zellen noch möglich ist.

und ja, mein ansatz mit der array verschactelung ist sicherlich unnötig umständlich und wäre wohl auch einfacher oder laufzeitsparender zu realisieren :-)

aber vom Ürinzip her funktioniert es sicherlich! :-D

Stelle dir folgende Strategie vor:

Du gehst das Sudoku von oben nach unten und von rechts nach links durch. Beim ersten freien Feld schaust du welche Zahlen möglich sind. Dann nimmst du einfach die kleinste Zahl die möglich ist. Dann gehst du weiter zum nächsten freien Feld und machst so weiter. Wenn du an eine Stelle kommst, bei der du gar keine Möglichkeiten mehr hast, etwas in ein Feld zu schreiben, weißt du, es gibt irgendwo einen Fehler. Also radierst du die letzte Entscheidung wieder weg und probierst dort die nächst höhere Zahl, die geht. Wenn du irgendwann dort auch alle probiert hast und immer stecken bleibst, dann gehst du wieder eins weiter zurück und so weiter. Das wiederholst du so lange bis irgendwann das Sudoku gelöst ist.

Diese ganz einfache Methode, die man auch als backtracking bezeichnet, ist zwar jetzt für einen Menschen nicht sonderlich empfehlenswert, weil sie ineffizient ist, aber es ist unglaublich simpel zu programmieren und die einfachste Variante, die man sich vorstellen kann. Es stellt sich heraus, dass Computer aber so schnell sind, dass man mit so einer simplen Methode locker jedes Sudoku schnell lösen kann. Selbstverständlich kann man einem Computer auch effizientere und kompliziertere Methoden beibringen.

Vermutlich wolltest du nur ein ja oder nein hören, aber ich dachte vielleicht du findest das interessant.