Hallo, da bin ich schon wieder
Nun geht es darum, ein Sudoku zu lösen. Genauer gesagt habe ch ein Sudoku mit einigen Lücken und möchte eine bestimmte Zahl in eine dieser Lücken platzieren, wo die Spielregeln dies eben zulassen.
Ich habe hier meines Wissens alle Sudoku-OpenSource Codes ect. durchgesehen. Am ansprechensden fand ich diesen
hier, sehr gut gegliedert und strukturiert. Denoch ist das ein wenig zu hoch für mich.
Leider scheitert es schon am Anfang, dem "eingeben" des Sudokus. Ich habe mein Sudoku in einem StringGrid gespeichert und möchte es nun in das Array der
Unit umwandeln.
Der Code der fremden
Unit:
Delphi-Quellcode:
...
type
use= set of 1..81;
TSudoku=Class(TObject)
private
sudoku: Array of Array[1..81] of Integer;
impossible:Array of Array[1..9,1..9,1..9] of Boolean;
owner: Array of Array[1..9,1..9,1..9] of Integer;
quadrant: Array of Array[1..3,1..3,1..9] of Boolean;
count,num:integer;
...
procedure TSudoku.SetVal(num,index,val:integer);
begin
sudoku[num,index]:=val;
end;;
...
Mein Code zum Eintragen:
Delphi-Quellcode:
procedure TfrmMain.btnSudokuAnClick(Sender: TObject);
var m, n, i: integer;
begin
Sudoku.Create;
i := 1;
for m := 0 to 8 do
begin
for n := 0 to 8 do
begin
Sudoku.SetVal(0,i,strtoint(sgSudoku.Cells[m,n]));
inc(i);
end;
end;
end;
In der Beschreibung steht noch:
Zitat:
#
1.
Unit USudoku einbinden über uses
2. Variable vom Typ TSudoku erstellen.
3. .create methode aufrufen
4. Werte ins Objekt laden. Dies geschieht per .Setvalue(0,1..81,val) //Wert 0 für leeres Feld!
...
Die Funktionen zum Setzen/Abrufen der Werte brauchen als ersten Paramter eine 0, damit auf die erste lösung zugegriffen wird. Ich bin gerade debei eine Funktion hinzuzufügen, die noch weitere Möglichkeiten berechnen kann, und diese in einem anderen Array abspeichert.
...
Punkt 1-3 waren einfach
aber bei Punkt 4 mach ich irgendwas falsch
MFG MaToBe
PS: Falls jemand einen Codeausschnitt hat, der genau das Leistet was ich oben beschieben habe, wär ich nicht abgeneigt, mir diesen mal anzusehn