const N=8; var k: integer; x: array[1..N] of integer; sum: longint; procedure PrintChessboard; var i,j:integer; begin writeln; writeln('No. ',sum); for i:=1 to N do begin for j:=1 to N do if j=x[i] then write('Q':2) else write('.':2); writeln; end; readln; end; function place(k: integer): boolean; var j:integer; begin for j:=1 to k-1 do if (k-j=abs(x[k]-x[j])) or (x[k]=x[j]) then begin place:=false; exit; end; place:=true; end; begin x[1]:=0; k:=1; sum:=0; while k>0 do begin x[k]:=x[k]+1; while (x[k]<=N) and not place(k) do x[k]:=x[k]+1; if x[k]<=N then if k=N then begin sum:=sum+1; PrintChessboard; end else begin k:=k+1; x[k]:=0; end else k:=k-1; end; writeln; writeln('Sum: ',sum); end.

评论