rekurencja, problem skoczka szachowego

0

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.

0

Puść to w debuggerze i zobacz wartości zmiennych które blokują dalsze wykonanie. W ten sposób najszybciej znajdziesz kierunek poszukiwań błędu logicznego.

1 użytkowników online, w tym zalogowanych: 0, gości: 1