Sudoku-Algorithmus, Brute Force [geschlossen]
Ich versuche, ein Sudoku-Board mit einem Brute-Force-Algorithmus zu lösen, aber ich kann diesen Algorithmus nicht richtig zum Laufen bringen.
Es wird ein Objekt für jede Zeile, Spalte und Box erstellt, das alle Quadrate (Zellen) enthält, die zu der tatsächlichen Spalte, dem Quadrat und der Zeile gehören. Dies wird in legalValue () verwendet, um zu überprüfen, ob in der Zelle ein Wert platziert werden kann.
Ich kann die Struktur nicht finden, die den Algorithmus arbeiten lässt.
<code> boolean setNumberMeAndTheRest(Board board) { if(getNext() == null) { for(int i = 1; i <= board.getDimension(); i++) { if(legalValue(i)) { setValue(i); } } board.saveSolution(); } else { if(this instanceof DefinedSquare) { getNext().setNumberMeAndTheRest(board); } else { for(int i = 1; i <= board.getDimension(); i++) { if(legalValue(i)) { setValue(i); if(getNext().setNumberMeAndTheRest(board)) { return true; } else { setValue(i); } } } return false; } } return false; } </code>
Hier ist legalValue (int i);
<code>/** * Checks if value is legal in box, row and column. * @param value to check. * @return true if value is legal, else false. */ boolean legalValue(int value) { if(box.legalValue(value) && row.legalValue(value) && columne.legalValue(value)) { return true; } return false; } </code>
<code>**4x4 Sudoku board INPUT** 0 2 | 1 3 0 0 | 0 4 --------- 0 0 | 0 1 0 4 | 3 2 **Expected OUTPUT** 4 2 | 1 3 3 1 | 2 4 --------- 2 3 | 4 1 1 4 | 3 2 **Actually OUTPUT** 4 2 | 1 3 2 4 | 3 4 --------- 3 0 | 0 1 0 4 | 3 2 </code>
Zurücksetzen der Karte hinzugefügt
<code>boolean setNumberMeAndTheRest(Board board) { Board original = board; if(getNext() == null) { for(int i = 1; i <= board.getDimension(); i++) { if(legalValue(i)) { setValue(i); } } board.saveSolution(); } else { if(this instanceof DefinedSquare) { getNext().setNumberMeAndTheRest(board); } else { for(int i = 1; i <= board.getDimension(); i++) { if(legalValue(i)) { setValue(i); if(getNext().setNumberMeAndTheRest(board)) { return true; } else { setValue(i); } } } board = original; return false; } } board = original; return false; } </code>
Nach langer Zeit ist sie eine Lösung: D
<code>boolean setNumberMeAndTheRest(Board board) { if(next == null) { board.saveSolution(); return true; } if(this instanceof DefinedSquare) { return next.setNumberMeAndTheRest(board); } for(int i = 1; i <= board.getDimension(); ++i) { if(legalValue(i)) { setValue(i); if(next.setNumberMeAndTheRest(board)) { return true; } } } setValue(0); return false; } </code>