Thema: Delphi Sudoku Logik

Einzelnen Beitrag anzeigen

Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#65

AW: Sudoku Logik

  Alt 4. Mär 2011, 16:39
Manchmal hilft es scheinbar, wenn man den ganzen Kram 3 Wochen liegen läßt und dann nochmal draufguckt. Hab den Fehler mMn gefunden: 3. Zeile von unten.
Zudem hab ich mal die Bestimmung von X,Y aus der Schleife rausgenommen. Das muss ja nicht jedes mal neu berechnet werden, da es sich ja nicht ändert.

Delphi-Quellcode:
function SetCell(i: integer) : boolean;
var ValidDecision: TStringList;
  j,X,Y: Integer;
  dig: string;
begin
  if i > (Size * Size - 1) then
  begin
    Result:=true;
    Exit;
  end;

      X:=i mod Size; //hierhin verschoben
      Y:=i div Size;

{.....................................................................}
  ValidDecision:=TStringList.Create;
  for j := 1 to Size do
    ValidDecision.Add(IntToStr(j));
{.....................................................................}
  while ValidDecision.Count > 0 do
  begin
    dig:=ValidDecision[random(ValidDecision.Count)];
    if DigitIsOk(i,StrToInt(dig)) then
    begin
// X:=i mod Size;
// Y:=i div Size;
      Form1.Map.Cells[X,Y]:=dig;
      if SetCell(i + 1) then
      begin
        Result:=True;
        Exit;
      end;
    end
    else
      ValidDecision.Delete(ValidDecision.IndexOf(dig));
  end;

  ValidDecision.Free;
  Form1.Map.Cells[0,0]:=dig;//Das ist der Fehler!!! Es muss nicht die 0/0 Zelle gestzt werden,
                            //sondern die X/Y Zelle muss auf 0 gesetzt werden:
  Form1.Map.Cells[X,Y]:='0';
  Result:=False;
end;
Das müsste es doch gewesen sein, oder?
Ralph
  Mit Zitat antworten Zitat