hi leute,
ich hoffe ich finde hier bei euch hilfe.
also mein problem ist folgendes, ich versuche nun schon seit über einer woche ein sudoku-programm mit hilfe von delphi zu erstellen. ich habe auch schon hier im forum gesucht und bin fündig geworden, jedoch konnten mir die quelltexte leider nicht weiter helfen, da ich sie nicht wirklich durchschaut habe

.
also erstellen will ich mein sudoku mit zufallszahlen von 1-9, dazu deklariere ich dann noch 3 mengen (für die zeilen, die spalten und die subquadrate) wo die zahlen abgelegt werden, im folgenden schritt wird wieder eine zufallszahl erzeugt und es soll geschaut werden ob sie schon in den mengen vorhanden ist, wenn ja benutze ich backtracking und versuche es erneut.
ich habe es auch schon geschaft das in den zeilen ODER in den spalten die zahlen 1-9 nur einmal vorkommen, jedoch klappt beides zusammen nicht
die subquadrate hab ich erstmal weggelassen(kommen aber noch).
so hier mal der quelli:
[code][list][*][list=1][*]
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45:
| procedure TForm1.Button2Click(Sender: TObject); type TSudoku = array[1..9] of set of 1..9; var su,x: array [1..9,1..9] of 0..9; Z, S,q: TSudoku ; i,l,zahl:integer; sudoku1,sudoku2,sudoku3:boolean; begin for i:=1 to 9 do for l:=1 to 9 do begin su[i,l]:=0; Z[i]:= [] ; S[l]:= [] ; end;
for i:=1 to 9 do begin for l:=1 to 9 do begin repeat sudoku1:=false; sudoku2:=false; randomize; zahl:=random(9)+1; if not (zahl in Z[l])then begin Z[l]:= z[l] + [zahl] ; sudoku1:=true; end; if not(zahl in S[i]) then begin S[i] := S[i] + [zahl] ; sudoku2:=true; end; until sudoku1=true and sudoku2=true ; su[i,l]:=zahl; end; end;
for i:=1 to 9 do for l:=1 to 9 do begin stringgrid1.Cells[i-1,l-1]:=inttostr(su[i,l]); end; end; |
ich bin sehr glücklich über jede hilfe, nur will ich nicht ganz von neuem anfangen, da ich die idee doch ganz gut finde.
mfg
Robert