* Created on Nov 2, 2006
*
* @by Marc Woerlein (Woerlein@informatik.uni-erlangen.de)
*/
/**
* Diese Schnittstelle beschreibt die Funktionalitaet
* ein teilweise vorgefuelltes Sudoku-Feld zu loesen.
*
* Ein gueltig ausgefuelltes Sudoku-Feld ist ein 9*9-Zahlenfeld,
* in dem in jeder Zeile, jeder Spalte und jedem Quadranten
* die Ziffern von 1 bis 9 genau einmal vorkommt.
*
* Hier ein Beispiel-Feld (aufgeteilt in seine 9 Quadranten):
*
* 057|420|000 357|429|681
* 040|071|090 648|371|592
* 200|080|000 291|586|437
* ---+---+--- ---+---+---
* 030|704|200 139|754|268
* 065|800|300 -> 465|812|379
* 080|903|054 782|963|154
* ---+---+--- ---+---+---
* 800|000|746 823|195|746
* 914|000|005 914|637|825
* 500|000|000 576|248|913
*
* Hierbei stellt die Ziffer "0" eine noch zu besetzenden Zelle dar.
*
* @author Marc Woerlein (Woerlein@informatik.uni-erlangen.de)
*
*/
public interface SudokuLoeserInterface {
/**
* ermittelt aus dem uebergebenen Sudoku-Feld, alle moeglichen Zahlen,
* die in der Zelle feld[y][x]
erlaubt sind.
*
* @param feld ein quadratisches und teilweise vorgefuelltes Sudoku-Feld
* @param x X-Koordinate, der zu untersuchenden Zelle
* @param y Y-Koordinate, der zu untersuchenden Zelle
* @return ein int[]
, mit allen erlaubten Zahlen
*/
public int[] moeglicheZahlen(int[][] feld, int x, int y);
/**
* Sucht nach einer gueltigen Loesung fuer das uebergebene Sudoku-Feld.
* Wenn es (irgend-) eine Loesung gefunden hat, steht diese in dem uebergebenen Feld,
* wenn nicht, ist das Feld danach wieder so gefuellt wie vorher.
*
* @param feld ein quadratisches und teilweise vorgefuelltes Sudoku-Feld
* @return true
, wenn eine Loesung gefunden wurde
*/
public boolean loese(int[][] feld);
/**
* Diese Methode versucht die Zelle feld[y][x]
nacheinander
* mit einem der moeglichen Werte zu fuellen und schaut dann rekursiv,
* ob dies zu einer Loesung fuehrt.
* Wenn keine Loesung gefunden wurde, muss die Zelle wieder geleert werden. *
* Wenn die Zelle schon durch eine Zahl besetzt ist,
* muss nur rekursiv nach einer Loesung gesucht werde.
*
* @param feld ein quadratisches und teilweise vorgefuelltes Sudoku-Feld
* @param x X-Koordinate, der zu untersuchenden Zelle
* @param y Y-Koordinate, der zu untersuchenden Zelle
* @return true
, wenn eine Loesung gefunden wurde
*/
public boolean loese_rec(int[][] feld, int x, int y);
/** ein loesbares Beispiel-Feld*/
final public static int[][] Beispiel1={
{0,5,7,4,2,0,0,0,0},
{0,4,0,0,7,1,0,9,0},
{2,0,0,0,8,0,0,0,0},
{0,3,0,7,0,4,2,0,0},
{0,6,5,8,0,0,3,0,0},
{0,8,0,9,0,3,0,5,4},
{8,0,0,0,0,0,7,4,6},
{9,1,4,0,0,0,0,0,5},
{5,0,0,0,0,0,0,0,0}
};
/** ein loesbares Beispiel-Feld*/
final public static int[][] Beispiel2={
{6,0,0,2,0,0,0,0,0},
{0,0,2,0,0,8,4,0,0},
{8,0,0,0,9,0,0,0,0},
{0,8,0,4,0,0,3,2,0},
{0,7,5,0,0,0,8,4,0},
{0,3,1,0,0,7,0,9,0},
{0,0,0,0,5,0,0,0,9},
{0,0,3,9,0,0,7,0,0},
{0,0,0,0,0,1,0,0,3}
};
/** ein loesbares Beispiel-Feld*/
final public static int[][] Beispiel3={
{0,5,0,8,0,1,0,7,0},
{2,0,0,6,0,0,1,0,8},
{0,0,0,0,2,0,6,0,0},
{0,0,3,5,0,0,4,0,0},
{0,0,0,0,3,0,0,0,0},
{0,0,7,0,0,6,5,0,0},
{0,0,8,0,1,0,0,0,0},
{9,0,6,0,0,2,0,0,5},
{0,2,0,9,0,8,0,3,0}
};
/** ein UNloesbares Beispiel-Feld*/
final public static int[][] Beispiel4={
{3,0,0,0,0,0,0,5,0},
{0,5,0,0,0,0,6,4,0},
{0,0,0,0,4,1,0,0,7},
{9,0,0,0,2,8,7,0,0},
{0,0,0,4,0,6,0,0,0},
{0,0,8,9,7,0,0,0,6},
{8,0,5,7,1,0,0,0,0},
{0,3,7,0,0,0,0,2,0},
{0,9,0,0,0,0,0,0,8}
};
}