|
|||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||
java.lang.Objectde.hska.java.aufgaben.backtracking.Sudoku
public class Sudoku
Sudoku lößt Sudoku-Rätsel mit einem Backtracking Algorithmus. Der Suchraum für eine Lösung ist sehr gross - insbesonders, wenn nur wenige Zahlen vorgegeben wurden. In diesen Fällen kann es sein, dass der Algorithmus zu lange braucht.
Um den Suchraum klein zu halten, wird pro Zeile, Spalte und jede von den 3 x 3 Boxen eine bereits gesetzt Zahl vermerkt: Ein Schritt (neue Zahl z) ist nur dann gültig, wenn sie noch nicht in der Zeile, Spalte oder Box vorhanden ist. Dieser Ansatz ist ähnlich zur Lösung des Acht-Damen-Problems und sehr effektiv.
| Field Summary | |
|---|---|
static int |
LEERES_FELD
|
| Constructor Summary | |
|---|---|
Sudoku(int[][] teilloesung)
Erzeugt ein neues Sudoku mit der übergebenen Teillösung. |
|
| Method Summary | |
|---|---|
void |
addSudokuListener(SudokuListener sudokuListener)
|
void |
erzeugeSudoku(int anzahlVorgaben)
Erzeugt ein Sudoku auf Basis zufälliger Vorgabezahlen. |
int[][] |
getTeilloesung()
|
int |
getZahl(int zeile,
int spalte)
|
static void |
main(java.lang.String[] argv)
|
void |
print()
Gibt den Inhalt des Spielfelds am Bildschirm aus. |
void |
printBoxNummern()
|
void |
remoeSudokuListener(SudokuListener sudokuListener)
|
boolean |
sucheLoesung(int zaehler)
Sucht mit Backtracking rekursiv nach einer Lösung für das Sudoku. |
void |
zahlHatSichGeaendert(int zeile,
int spalte)
|
| Methods inherited from class java.lang.Object |
|---|
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
|---|
public static final int LEERES_FELD
| Constructor Detail |
|---|
public Sudoku(int[][] teilloesung)
| Method Detail |
|---|
public void print()
public boolean sucheLoesung(int zaehler)
zaehler - Gibt die Anzahl bisher belegter Zellen an - Startwert ist 0
public void erzeugeSudoku(int anzahlVorgaben)
anzahlVorgaben - Anzahl der Vorgabezahlen
public void zahlHatSichGeaendert(int zeile,
int spalte)
public void addSudokuListener(SudokuListener sudokuListener)
public void remoeSudokuListener(SudokuListener sudokuListener)
public int getZahl(int zeile,
int spalte)
public int[][] getTeilloesung()
public void printBoxNummern()
public static void main(java.lang.String[] argv)
|
|||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||
(c) Prof. Dr. Christian Pape --- Übersicht aller Java-Programmieraufgaben