Autor Beitrag
rob3rt
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Mo 20.03.06 20:49 
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][*]
ausblenden volle Höhe Delphi-Quelltext
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..9of set of 1..9;
var su,x: array [1..9,1..9of 0..9;
    Z, S,q: TSudoku ;
    i,l,zahl:integer;
    sudoku1,sudoku2,sudoku3:boolean;
begin
 for i:=1 to 9 do    //erstellt leeres sudoku
    for l:=1 to 9 do
      begin
        su[i,l]:=0;
        Z[i]:= [] ;
        S[l]:= [] ;
      end;

  for i:=1 to 9 do  //erstellt zufällige zahlen und prüft sie auf doppelheit
    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    //überprüft zeilen
              begin
                Z[l]:= z[l] + [zahl] ;
                sudoku1:=true;
              end;
            if not(zahl in S[i]) then    //überprüft spalten
              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   //schreibt die zahlen in das stringgrid
    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
µaTh
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 31.05.06 10:33 
das problem hätten wir ja jetzt gelöst ;) und die note war ja auch nicht schlecht.