Обход шахматной доски конем — Pascal(Паскаль)

{$G+}
const wb=8; nb=wb*wb;
      s:array[1..8,1..2] of integer =
      ((-2,1),(-1,2),(1,2),(2,1),(2,-1),(1,-2),(-1,-2),(-2,-1));
 
var   b: array[1..wb,1..wb] of boolean;
      m: array[1..nb,1..2] of integer;
      p:    integer;
 
procedure PrintAndExit;
var i:integer;
begin
  assign(output,'output.txt'); rewrite(output);
  for i:=1 to nb-1 do write(m[i,1],':',m[i,2],',');
  writeln(m[nb,1],':',m[nb,2]); halt;
end;
 
procedure Solution(r,c:integer);
var d,i,j:integer;
begin
  if (p>pred(nb)) then PrintAndExit;
  for d:=1 to 8 do begin
    i:=r+s[d,1]; j:=c+s[d,2];
    if NOT(i in[1..wb]) or NOT(j in[1..wb]) or (b[i,j]) then continue;
    inc( p );
    m[p,1]:=i; m[p,2]:=j; b[i,j]:=true;
    Solution( i,j );
    dec( p );
    b[i,j]:=false;
  end;
end;
 
var i,j:integer;
begin
  fillchar(b,sizeof(b),false);
  for i:=1 to wb div 2 do
      for j:=1 to wb div 2 do begin
         p:=1; m[p,1]:=i; m[p,2]:=j; b[i,j]:=true;
         Solution(i,j);
         b[i,j]:=false;
      end;
end.

Leave a Comment

+ 43 = 45