?
Mit dem Backtracking habe ich noch Schwierigkeiten. ist das so gedacht, dass ich, wenn ein leeres Feld mehr als eine Lösung hat (ergo noch nicht eindeutig befüllbar ist)zum letzten von mir eingesetzten Wert zurückkehre, diesen um eins reduziere und dann das Programm ab dieser Stelle weiter laufen soll?
Also so:
void FillGaps ( field f) {
int j = 0; // Zeile
int i = 0; // Spalte
int counter = 0; // Zähl wieviele values möglich
int TMP = 0; // Merkt sich den value kurz
int i_TMP = 0; // Merkt sich i kurz
int j_TMP = 0; // Merkt sich j kurz
while (CheckIfAnyZero(f) ) {
while ( FindGaps(i, j, f) ){ // FindGaps ist true, wenn eine Lücke gefunden wurde, i und j sind Übergangsparameter für die Stelle der Lücke
counter = 0;
TMP = 0;
for ( int value = 1 ; value < 10; value++ ) {
if ( CheckRow (value, j, f) && CheckColumn (value, i, f) && CheckBox (i, j, value, f) ) {
TMP = value;
counter++; // Zählt an dieser Stelle wieviele Werte die Lücke füllen könnten
}
}
if ( counter < 2) { // eine Zahl darf nur eingesetzt werden, wenn sie die einzige mögliche Zahl ist
f[j][i] = TMP;
i_TMP = i;
j_TMP = j;
}
else { // da keine Zahl eingesetzt werden konnte, geht das Programm einen Schritt zurück / Backtracking
i = i_TMP;
j = j_TMP;
f[j][i]--;
}
i++; // damit FindGaps ein Feld weiter geht
}
}
}
Tut mir Leid falls die Fragen dumm sein sollten, ich bin noch eher ein Anfänger
LG