Witam,
Mam problem z algorytmem skoczka szachowego, ma on podać sekwencje ruchów, poprzez którą konik, odwiedzi wszystkie pola, nie powtarzając się.
program horse;
const
N = 6;
hx : array[1..8] of integer = (1, 2, 2, 1, -1, -2, -2, -1); {jakie ruchy może wykonywać w poziomie}
hy : array[1..8] of integer = (2, 1, -1, -2, -2, -1, 1, 2); {jakie ruchy może wykonywać w pionie}
var
board : array[1..N, 1..N] of integer;
i, j:integer;
procedure print();
begin
for i := 1 to N do begin
for j := 1 to N do begin
write(board[i][j], ' ');
end;
writeln;
end;
writeln;
end;
procedure jump(x:integer; y:integer; number:integer);
begin
if (x>0) and (y>0) and (x<=N) and (y<=N) then begin
if board[x][y] = 0 then begin
board[x][y] := number;
if number = N*N then begin
print();
end;
for i := 1 to 8 do begin
jump(x+hx[i], y+hy[i], number +1);
end;
board[x][y] := 0;
end;
end;
end;
begin
jump(1,1,1);
for i := 1 to N do begin
for j := 1 to N do begin
write(board[i][j], ' ');{z tej pętli dowiaduje sie jaki byl przebieg programu
end;
writeln();
end;
end.
Kod wykonuje się tylko raz, czyli tablice 6x6, przeskakuje z pola na pole dopóki może, wskakuje na pole [6,2] jest one oznaczone nr 23. Nie ma żadnego ruchu do zrobienia, więc powinien wyzerować pole, cofnąć rekurencyjnie o jedną gąłąź wyżej i robić następny element pętli. Niestety tego nie robi.