2000 - BÀI TOÁN 8 HẬU (DÀNH CHO HỌC SINH TIỂU HỌC)CÓ RẤT NHIỀU...

Bài 11/2000 - Bài toán 8 hậu (Dành cho học sinh Tiểu học)Có rất nhiều cách xếp. Sau đây là một vài cách để các bạn tham khảo:0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 00 0 0 0 0 1 0 0 0 0 0 0 0 0 0 10 0 1 0 0 0 0 0 1 0 0 0 0 0 0 00 0 0 0 0 0 1 0 0 0 0 0 1 0 0 00 1 0 0 0 0 0 0 0 0 0 0 1 0 0 00 0 0 0 0 0 1 0 0 0 0 1 0 0 0 01 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 1 0 0 0 0 1 0 0 0 0 00 0 0 0 0 0 1 0 1 0 0 0 0 0 0 00 0 1 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 1 0 0 0 0 0 1 0 0 0 00 1 0 0 0 0 0 0 0 0 0 0 0 1 0 01 0 0 0 0 0 0 0 0 0 0 0 0 0 1 00 0 0 1 0 0 0 0 0 0 0 0 0 0 0 10 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0Để tìm hết nghiệm của bài này chúng ta phải sử dụng thuật toán Đệ quy - Quay lui. Sau đây là chương trình, chạy ra 92 nghiệm và ghi các kết quả đó ra file HAU.OUT.

{$A+,B-,D+,E+,F-,G-,I+,L+,N-,O-,P-,Q+,R+,S+,T-,V+,X+}

{$M 16384,0,655360}

uses crt;

const fo = 'hau.out';

n = 8;

var A : array[1..n,1..n] of byte;

c : array[1..n] of byte;

dc1 : array[2..2*n] of byte;

dc2 : array[1-n..n-1] of byte;

sn : integer;

f : text;

procedure ghino;

var i,j : byte;

begin

inc(sn);

writeln(f,'Nghiem thu ',sn,' la :');

for i := 1 to n do

begin

for j := 1 to n do

write(f,A[i,j],#32);

writeln(f);

end;

writeln(f);

end;

procedure vet(i : byte);

var j : byte;

if i = n+1 then

begin

ghino;

exit;

end;

for j := 1 to n do

if (c[j] =0)and(dc1[i+j]=0) and (dc2[i-j]=0) then

begin

A[i,j] := 1; c[j] := 1; dc1[i+j] :=1 ; dc2[i-j] := 1;

vet(i+1);

A[i,j] := 0; c[j] := 0; dc1[i+j] :=0 ; dc2[i-j] := 0;

end;

BEGIN

assign(f,fo);

rewrite(f);

vet(1);

close(f);

END.