program skoczek; const w = 4; type plansza = array [1..w,1..w] of integer; var p : plansza; i,j : integer; procedure drukuj(pl: plansza); (* drukuje plansze *) var i, j : integer; begin for i := 1 to w do begin for j := 1 to w do write(pl[i,j]:4); writeln end; writeln end; { drukuj } procedure generuj(var pl : plansza); (* generuje PUSTA plansze *) var i, j : integer; begin for i := 1 to w do for j := 1 to w do pl[i,j]:=0; end; { generuj } procedure skok(i,j : integer;var pl : plansza; nr : integer); var ni,nj : integer; begin drukuj(pl); { wydruk kontrolny - kolejne stany zapelnienia planszy } pl[i,j] := nr; if nr = w*w then drukuj(pl) else begin ni := i+1; nj := j+2; if (1<=ni) and (ni<=w) and (1<=nj) and (nj<=w) then if pl[ni,nj] = 0 then skok(ni,nj,pl,nr+1); ni := i-1; nj := j+2; if (1<=ni) and (ni<=w) and (1<=nj) and (nj<=w) then if pl[ni,nj] = 0 then skok(ni,nj,pl,nr+1); ni := i+1; nj := j-2; if (1<=ni) and (ni<=w) and (1<=nj) and (nj<=w) then if pl[ni,nj] = 0 then skok(ni,nj,pl,nr+1); ni := i-1; nj := j-2; if (1<=ni) and (ni<=w) and (1<=nj) and (nj<=w) then if pl[ni,nj] = 0 then skok(ni,nj,pl,nr+1); ni := i+2; nj := j+1; if (1<=ni) and (ni<=w) and (1<=nj) and (nj<=w) then if pl[ni,nj] = 0 then skok(ni,nj,pl,nr+1); ni := i+2; nj := j-1; if (1<=ni) and (ni<=w) and (1<=nj) and (nj<=w) then if pl[ni,nj] = 0 then skok(ni,nj,pl,nr+1); ni := i-2; nj := j+1; if (1<=ni) and (ni<=w) and (1<=nj) and (nj<=w) then if pl[ni,nj] = 0 then skok(ni,nj,pl,nr+1); ni := i-2; nj := j-1; if (1<=ni) and (ni<=w) and (1<=nj) and (nj<=w) then if pl[ni,nj] = 0 then skok(ni,nj,pl,nr+1); end; pl[i,j] := 0 end; { skok } begin for i:= 1 to (w+1)div 2 do for j := 1 to i do begin generuj(p); skok(i,j,p,1) end; writeln('KONIEC') end.