@rvk:
Code:
function TForm1.Solve: boolean;
var i , j , n: integer;
begin
for I := Low(Matrix) to High(Matrix) do
for j := Low(Matrix[i]) to High(Matrix[i]) do
if Matrix[i,j] = 0 then
begin
for n := 1 to 9 do
if IsValidNumber(n , i , j) then
begin
Matrix[i,j] := n;
if solve then
exit(true) else
begin
Matrix[i,j] := 0;
exit(false);
end;
end;
end;
exit(true);
end;
Code ziet er nu zo uit. Steeds hetzelfde resultaat. Maar ik denk dat ik wel weet waar het probleem is, maar nog na moet denken over de oplossing.
Gaan we nl stap voor stap kijken wat de code doet:
Loop door de matrix:
Code:
for I := Low(Matrix) to High(Matrix) do
for j := Low(Matrix[i]) to High(Matrix[i]) do
Als de waarde 0 is check of ereen ValidNumber is en plaats het daar.
Code:
if Matrix[i,j] = 0 then
begin
for n := 1 to 9 do
if IsValidNumber(n , i , j) then
begin
Matrix[i,j] := n;
if Solve... gaat hier dus terug naar de nested loop voor de exit.
En hierboven is de matrix dus al aangepast.
Code:
if solve then
exit(true) else
Maar wat er zou moeten gebeuren is dat er gechecked wordt of het vanaf aan bepaalde positie oplosbaar is, zo niet moet de waarde van de oorspronkelijke positie weer 0 worden.
Code:
exit(true) else
begin
Matrix[i,j] := 0;
exit(false);
end;
Maar hierboven zijn er in de matrix al aanpassingen gedaan...
Of maak ik nu een denkfout?
Bookmarks