So generieren Sie Sudoku-Boards mit einzigartigen Lösungen
Wie generieren Sie ein Sudoku-Brett mit einer einzigartigen Lösung? Was ich dachte, war initialisiert ein random-board und entfernen Sie dann einige zahlen. Aber meine Frage ist wie behalte ich die Eindeutigkeit der Lösung?
InformationsquelleAutor der Frage guilin 桂林 | 2011-08-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einfach:
Ich bezweifle, dass Sie eine Lösung finden können, die wäre viel schneller als diese.
InformationsquelleAutor der Antwort TMS
Hier ist übrigens meine eigenen SuDoKu-Programm macht es:
starten Sie mit einem kompletten, gültig board (gefüllt mit 81 zahlen)
machen Sie eine Liste aller 81 cell Positionen und mische es zufällig
Solange die Liste nicht leer ist, nehmen Sie die nächste position aus der Liste aus und entfernen Sie die Nummer aus der zugehörigen Zelle
test Einzigartigkeit mit einem schnellen solver (mit backtracking falls erforderlich). Mein solver ist in der Lage zu zählen alle Lösungen, aber es Stoppt, wenn es mehr als 1 Lösung.
Wenn das aktuelle board hat nur eine Lösung, gehe zu Schritt 3 und wiederholen.
Wenn das aktuelle board hat mehr als eine Lösung, rückgängig die Letzte entfernen (Schritt 3), und weiter zu Schritt 3 mit der nächsten position aus der Liste
stoppen, wenn Sie getestet haben, alle 81 Positionen.
Dies gibt Ihnen nicht nur einen einzigartigen Brettern, aber boards, wo Sie nicht entfernen können, mehr zahlen, ohne die Zerstörung der Eindeutigkeit der Lösung.
Natürlich, dies ist nur die zweite Hälfte des Algorithmus. Die erste Hälfte ist zu finden, eine vollständige, gültige board-erste (zufällig gefüllt!) Es funktioniert sehr ähnlich, aber "in die andere Richtung":
beginnen Sie mit einem leeren Brett
fügen Sie eine zufällige Zahl in eine der freien Zellen (die Zelle wird nach dem Zufallsprinzip ausgewählt, und die Zahl wird nach dem Zufallsprinzip aus der Liste der Nummern, gilt für diese Zelle gemäß der SuDoKu-Regeln)
Verwenden Sie die backtracking-solver prüfen, ob der aktuelle Vorstand hat mindestens eine gültige Lösung. Wenn nicht, rückgängig zu Schritt 2 und wiederholen Sie mit einer anderen Nummer und Zelle. Beachten Sie, dass dieser Schritt möglicherweise produzieren voll gültig boards auf seine eigene, aber die sind in keiner Weise zufällig.
Wiederholen, bis das board ist komplett mit zahlen gefüllt
InformationsquelleAutor der Antwort Doc Brown
Können Sie betrügen. Beginnen Sie mit einer vorhandenen Sudoku-Brett, das gelöst werden kann, dann herumbasteln.
Können Sie tauschen eine Zeile von drei 3x3-Blöcke mit einer anderen Zeile. Sie tauschen können jede Spalte von drei 3x3-Blöcke mit einer anderen Spalte. In jeden block, Zeile oder block Spalte, die Sie tauschen können einzelne Zeilen und einzelne Spalten. Schließlich können Sie permutiert die zahlen, so gibt es unterschiedliche zahlen, die in der gefüllten Positionen, solange die permutation, die konsistent über das gesamte board.
Keine dieser änderungen wird eine lösbare board unlösbar.
InformationsquelleAutor der Antwort rossum
Es sei denn, P = NP, gibt es kein polynomial-Zeit Algorithmus für die Generierung von Allgemeinen Sudoku-Probleme mit genau einer Lösung.
In seiner master ' s thesis, Takayuki Yato definiert Die Andere Lösung Des Problems (ASP), bei denen das Ziel ist, eine problem-und eine Lösung zu finden, eine andere Lösung für dieses problem oder zeige, dass keiner existiert. Yato dann definiert ASP-Vollständigkeit, Probleme, für die es schwierig ist, nach einer Lösung zu suchen, und zeigte, dass Sudoku ist ASP-abgeschlossen. Da er beweist auch, dass die ASP-Vollständigkeit impliziert die NP-Härte, dies bedeutet, dass, wenn Sie erlauben, für eine beliebige Größe Sudoku-boards, es gibt keinen polynomial-Zeit-Algorithmus, um zu überprüfen, ob das puzzle, das Sie erstellt haben, eine eindeutige Lösung hat (es sei denn P = NP).
Sorry verwöhnen Ihre Hoffnungen auf einen schnellen Algorithmus!
InformationsquelleAutor der Antwort templatetypedef
Es ist nicht einfach, um eine generische Lösung. Sie müssen wissen, ein paar Dinge zu generieren, die eine bestimmte Art von Sudoku... zum Beispiel, Sie können nicht bauen ein Sudoku mit mehr als neun leer 9-Anzahl Gruppen (Reihen -, 3x3-Blöcke oder Spalten). Minimum gegebenen zahlen (D. H. "Hinweise"), in einer einzigen Lösung Sudoku wird angenommen, dass 17, aber die Zahl der Positionen für diese Sudoku sind sehr spezifische, wenn ich bin nicht falsch. Die Durchschnittliche Anzahl von hinweisen bei Sudoku ist über 26, und ich bin mir nicht sicher, aber wenn Sie beenden, zahlen ein fertiges raster, bis er 26, und lassen Sie diese in einer symmetrischen Art und Weise können Sie ein gültiges Sudoku.
Auf der anderen Seite, können Sie nur willkürlich beendet werden zahlen von ausgefüllten raster und testen Sie mit Riffel-oder andere tools, bis es kommt ein OK.
InformationsquelleAutor der Antwort Daniel
Ich denke auch, dass Sie haben, um explizit zu überprüfen, Einzigartigkeit. Wenn Sie weniger als 17 vorgegebenen zahlen, eine einzigartige Lösung, die sehr unwahrscheinlich ist, aber: Keiner hat sich bislang nicht gefunden, obwohl es ist noch nicht klar, ob es existiert.)
Aber Sie können auch ein SAT-solver, im Gegensatz zum schreiben eines eigenen backtracking-Algorithmus. So, Sie kann in gewissem Maße regulieren, wie schwierig es sein wird, eine Lösung zu finden: Wenn Sie eine Einschränkung der Inferenz-Regeln, dass der SAT-solver verwendet, können Sie prüfen, ob Sie das Rätsel lösen leicht. Google einfach mal nach "SAT-solving sudoku".
InformationsquelleAutor der Antwort DaveFar
Hier ist ein Weg, um eine klassische sudoku-Rätsel (sudoku puzzle mit eine und einzige Lösung; vor-ausgefüllten Felder sind symmetrisch um das mittlere Quadrat R5C5).
1) beginnen Sie mit einem kompletten grid (mit Gruppe Füllung plus circular shift, um es leicht zu bekommen)
2) entfernen Sie die Nummer(N) aus zwei symmetrischen Quadrate, wenn die freigewordenen Plätze abgeleitet werden kann, mit den restlichen hinweisen.
3) wiederhole (2) bis alle zahlen überprüft werden.
Mit dieser Methode können Sie erstellen eine sehr einfache sudoku-Rätsel mit oder ohne Programmierung. Sie können diese Methode auch verwenden, um Handwerk schwieriger Sudoku-Rätsel. Vielleicht möchten Sie suchen "erstellen klassischen sudoku" auf YouTube, um eine Schritt für Schritt-Beispiel.
InformationsquelleAutor der Antwort Yaling Zheng
Diese Logik wird Ihnen einzigartige 9*9 sudoku jedes mal, wenn Sie es ausführen.
Es dauert 15 Minuten, 20 Minuten zum generieren eines eindeutigen sudoku.
InformationsquelleAutor der Antwort Ajay