Viết chương trình để tìm các phương án đặt 8 quân hậu trên bàn cờ vua (ma trận 8 x 8) sao cho các quân hậu không ăn được nhau. Có bao nhiêu cách đặt. const max = 8; Var n,k:integer; x: array1..max of integer; a: array1..max of boolean; b: array2..2max of boolean; c: array1max..max1 of boolean; Procedure Print; BEGIN For k:=1 to max do Write((,k,;,xk,); ); writeln; End; Procedure Quaylui(i:integer); Var j:integer; BEGIN For j:=1 to max do if aj and bi+j and cij then BEGIN xi:=j; If i = Max Then BEGIN Print ; n:=n+1; End Else BEGIN aj:=false; bi+j:=false; cij:=false; Quaylui(i+1); aj:=true; bi+j:=true; cij:=true; end; end; End; .................
Trang 1max = 5;
Var
n,k:integer;
x: array[1 max] of integer;
a: array[1 max] of boolean;
b: array[2 2*max] of boolean;
c: array[1-max max-1] of boolean;
Procedure Print;
Begin
For k:=1 to max do Write('(',k,';',x[k],'); ');
writeln;
End;
Procedure Quaylui(i:integer);
var
j:integer;
Begin
For j:=1 to max do
if a[j] and b[i+j] and c[i-j] then
begin
x[i]:=j;
if i=max then
begin
print ;
n:=n+1;
end
else
begin
a[j]:=false; b[i+j]:=false; c[i-j]:=false; Quaylui(i+1);
a[j]:=true; b[i+j]:=true; c[i-j]:=true; end;
end;
End;
BEGIN
Fillchar(a,sizeof(a),true);
Fillchar(b,sizeof(b),true);
Fillchar(c,sizeof(c),true);
Quaylui(1);
Writeln(n);
Readln;
END