Hey,
glaube ich hab eine sehr schwierige Frage.
An sich ist das bestimmt nicht so kompliziert, aber ich hab mir mal wieder was komisches ausgedacht
Nun, erstmal beschreibe ich mein Programm:
Insgesamt soll ist ein Sudoku Solver werden. Das Sudoku wird in ein Array 0..8 of Array (integer) 0..8 eingetragen. Alle leeren Felder werden dann mit einer 0 gefüllt. Dann werden alle leeren Felder (Felder mit 0) mit Kandidaten gefüllt, sprich bekommen den Wert 123456789. So weit so gut.
Dann werden aus den Kandidaten alle festen Werte gelöscht. Dies gelingt mir auch mit den Werten einer Spalte und einer Reihe, jedoch nicht mit denen in einem Feld. Leider ist der Code für die Spalte und Reihe schon sehr kompliziert. Dann habe ich mich an den Code für die Felder herangewagt, aber scheite immer wieder, mein letzter Versuch sieht folgendermaßen aus:
Es muss ein Denkfehler von mir sein...
Delphi-Quellcode:
Procedure TForm2.BtKndDeleteClick(Sender: TObject);
Var
x, y, a, b, m, n, xx, yy: integer;
s, ss: String;
Begin
m := 0;
n := 0;
a := 0;
b := 0;
// Feld mit mehrern Kandidaten suchen
Repeat
Repeat
If aSudoku[m, n] > 9 Then Begin
a := m;
b := n;
x := m;
// Zeile nach Werten durchsuchen und aus Kandidatenliste löschen
For y := 0 To 8 Do
If aSudoku[x, y] < 10 Then Begin
s := IntToStr(aSudoku[a, b]);
ss := IntToStr(aSudoku[x, y]);
s := Stringreplace(s, ss, '', [rfReplaceAll]);
aSudoku[a, b] := StrToInt(s);
End;
y := n;
// Spalte nach Werten durchsuchen und aus Kandidatenliste löschen
For x := 0 To 8 Do
If aSudoku[x, y] < 10 Then Begin
s := IntToStr(aSudoku[a, b]);
ss := IntToStr(aSudoku[x, y]);
s := Stringreplace(s, ss, '', [rfReplaceAll]);
aSudoku[a, b] := StrToInt(s);
End;
//Feld nach Werten durchsuchen und aus Kandidatenliste löschen
For xx := 0 To 2 Do
For yy := 0 To 2 Do Begin
For x := xx * 3 To xx * 3 + 2 Do
For y := yy * 3 To yy * 3 + 2 Do
If aSudoku[x, y] < 10 Then Begin
s := IntToStr(aSudoku[a, b]);
ss := IntToStr(aSudoku[x, y]);
s := Stringreplace(s, ss, '', [rfReplaceAll]);
aSudoku[a, b] := StrToInt(s);
End;
End;
End;
n := n + 1;
Until n > 8;
n := 0;
m := m + 1;
Until m > 8;
End;