Registriert seit: 2. Aug 2008
162 Beiträge
|
Re: Sudoku Lösen und Code Verständnisproblem
19. Mai 2010, 00:33
Zitat von omata:
Vielleicht hilft dir das hier weiter.
Besitzt dein Programm solch eine Funktion? Ich habe dein Projekt bereits aufm PC aber ich kann es nicht compilieren... "QuickRpt, QRCtrls können nicht aufgelöst werden".
Zitat von Tryer:
Sudoku := TSudoku.Create;
Ansonsten dürfte die Fehlerbeschreibung etwas genauer sein
okay das war wirklich ein blöde Fehler... naja is schon spät
jetzt scheint es zu funktionieren, auch wenn ich natürlich keine visuelle Bestätigung habe.
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;
fehler:boolean;
ErrVal,ErrNum:integer;
inuse: set of 1..81;
...
procedure TSudoku.SetPos(num,index:integer); //Möglichkeiten setzen
var
x,y,c1,c2,Val,LineX,LineY,QuadX,QuadY:integer;
begin
LineX:=GetLineX(index);
LineY:=GetLineY(index);
QuadX:=GetQuadX(index);
QuadY:=GetQuadY(index);
Val:=Sudoku[num,index];
//Zeilen Möglichkeiten setzen;
for c1:=1 to 9 do begin
if owner[num,LineX,c1,val]=0 then owner[num,LineX,c1,val]:=index;
impossible[num,LineX,c1,val]:=true;
if owner[num,c1,LineY,val]=0 then owner[num,c1,LineY,val]:=index;
impossible[num,c1,LineY,val]:=true;
if owner[num,Linex,Liney,c1]=0 then begin
owner[num,Linex,Liney,c1]:=index;
impossible[num,Linex,Liney,c1]:=true;
end;
end;
for c1:= 1 to 3 do begin
x:=(Quadx-1)*3+c1;
for c2:=1 to 3 do begin
y:=(Quady-1)*3+c2;
if owner[num,x,y,val]=0 then owner[num,x,y,val]:=index;
impossible[num,x,y,val]:=true;
end;
end;
Quadrant[num,QuadX,QuadY,val]:=true;
end;
Mit diesem Code werden fü jedes Feld, so wie ich das Verstanden habe, die möglichen Zahlen gesetzt. Allerdings werde ich daraus nicht ganz schlau. Vielleicht kann mir das einer grob erklären... Ansatz usw.
|