Расставить на стандартной 64-клеточной доске 8 ферзей так, чтобы ни один из них не находился под боем другого

westflag

Расставить на стандартной 64-клеточной доске 8 ферзей так, чтобы ни один из них не находился под боем другого (горизонтали, вертикали и диагонали шахматной доске должны не совпадать). Найти количество таких комбинаций. Помогите мой код
program zav4;
 
var
  i, j, u: integer;
  b: array[1..8,1..8, 1..8]of integer;
 
procedure horz(k, t: integer);
var
  r: integer;
begin
  for r := 1 to 8 do
    if(r <> t) then  b[u,k, r]:= 9;
end;
 
procedure vert(k, t: integer);
var
  r: integer;
begin
  for r := 1 to 8 do
    if(r <> k) then b[u,r, t] := 9;
end;
 
procedure diag(k, t: integer);
var
  r, y: integer;
 
 
begin
  y := t + 1;
  for r := k + 1 to 8 do 
  begin
    if(r < 9) and (y < 9) then
      b[u,r, y] := 9;
    inc(y);
  end;
  y := t - 1;
  for r := k + 1 to 8 do 
  begin
    if(r < 9) and (y > 0) then
      b[u,r, y] := 9;
    dec(y);
  end;
  y := t - 1;
  for r := k - 1 downto 1 do 
  begin
    if(r > 0) and (y > 0) then
    b[u,r, y] := 9;
    dec(y);
  end;
  y := t + 1;
  for r := k - 1 downto 1 do 
  begin
    if(r > 0) and (y < 9) then
     b[u,r, y] := 9;
    inc(y);
  end;
  
end;
 
begin
  for u:=1 to 8 do begin 
  b[u,1,u]:=1;
  diag(1,u);
  horz(1,u);
  vert(1,u);
  for i := 2 to 8 do 
    for j := 1 to 8 do 
      if(b[u,i, j] < 9) then begin b[u,i, j] := i;horz(i, j);vert(i, j);diag(i, j); end;
      end;
  for u:=1 to 8 do
  begin
    writeln();
  for i := 1 to 8 do 
  begin
    writeln();
    for j := 1 to 8 do 
      write(b[u,i, j], ' ');
  end;
  end;
  
  
end.
1 ответ