Delphi-Quellcode:
function TForm1.TestSudoku: boolean;
var
N, M, K, I, J, J1, K1: integer;
T: TPoint;
begin
// Ausdünnung
// 1. Doppelte Kandidaten entfernen
Result:= true;
for N:= 1 to 9 do // Numbers
for I:= 0 to 8 do // Boxes
for J:= 0 to 8 do // Indices
begin
T:= BoxToRowCol(I, J);
K:= RowColToIndex(T.X, T.Y); // Edit
if FCandidates[K].IndexOf(N) > -1 then
for J1:= 0 to 8 do // Indices
begin
T:= BoxToRowCol(I, J1);
K1:= RowColToIndex(T.X, T.Y); // Edit
if K <> K1 then
begin
M:= FCandidates[K1].IndexOf(N);
if M > -1 then FCandidates[K1].Del(M);
end;
end;
end;
und jetzt ??
wann false (also nicht eindeutig) ????
Ich gehe so vor, daß für alle nicht gesetzten Felder eine Kandidatenliste erstellt wird und anschließend soll TestSudoku nun feststellen, ob das Sudoku so eindeutig (lösbar) ist. Kann man abschätzen, ab welcher Kandidatenanzahl (nach Ausdünnung der Doppel) ein Sudoku eindeutig ist oder wie macht man das ?