einen wunderschönen guten abend wünsche ich.. ich muss mich leider mal wieder mit einem problem(chen) melden...
ich hänge gerade an nem sudokulöser fest, der via rekursion und backtracking ein vorgegebens sudoku lösen soll.. an und für sich klappt auch alles hervorragend, bis auf ein paar kleinigkeiten.
die lösung, die ich bei der ersten spalte erhalte ist komplett richtig, alles andere ist in teilen richtig oder totaler murks.
irgendwo da liegt der hund begraben, die methode wird mit den parametern 0 für zeile und -1 für spalte aufgerufen und soll dann eigentlich ihr werk verrichten.
ich bin mit meinem spärlichen latein mittlerweile am ende und würde mich tierisch freuen, wenn mir jemand einfach nur sagen könnte, wo ich was falsch gemacht hab
ich hänge gerade an nem sudokulöser fest, der via rekursion und backtracking ein vorgegebens sudoku lösen soll.. an und für sich klappt auch alles hervorragend, bis auf ein paar kleinigkeiten.
die lösung, die ich bei der ersten spalte erhalte ist komplett richtig, alles andere ist in teilen richtig oder totaler murks.
Java:
/**
* Rekursiver Lösungsansatz
*
* @param zeile, spalte : Eingabeparameter für Funktionsaufruf
*
* @ return: true, wenn erfolgreich, false, wenn nicht
*/
public static boolean loese(int zeile, int spalte) {
// wenn Zeile noch nicht zuende, Spalte + 1
if (spalte < 9) {
spalte++;
}
// wenn Zeile voll, gehe zur nächsten
else {
zeile++;
spalte = 0;
}
// Wenn fertig, gib true zurück
if ((spalte == 8) && (zeile == 8)) {
return true;
}
// Wenn Zahl gesetzt, loese naechstes Feld
if (sudoku[zeile][spalte] > 0) {
return loese(zeile, spalte + 1);
}
// Probier die möglichen Zahlen aus
for (int zahl = 1; zahl < 10; zahl++) {
if ((pruefeZeile(zeile, zahl) == false) &&
(pruefeSpalte(spalte, zahl) == false) &&
(pruefeFeld(zeile, spalte, zahl) == false)) {
sudoku[zeile][spalte] = zahl;
// Wenns klappt, dann mach gefäligst weiter
if (loese(zeile, spalte + 1)) {
return true;
}
}
}
// Wenn nicht, dann setz das Feld zurück
sudoku[zeile][spalte] = 0;
return false;
}
irgendwo da liegt der hund begraben, die methode wird mit den parametern 0 für zeile und -1 für spalte aufgerufen und soll dann eigentlich ihr werk verrichten.
ich bin mit meinem spärlichen latein mittlerweile am ende und würde mich tierisch freuen, wenn mir jemand einfach nur sagen könnte, wo ich was falsch gemacht hab