曹天齐吧 关注:6贴子:391
  • 0回复贴,共1
program queen;
var
  a:array[1..8] of integer;
  b:array[-7..16,-7..16] of integer;
  k:integer;
  procedure main(n:integer);
    var
      i,j:integer;
    begin
      if n=9 then
        begin
          for i:=1 to 8 do
            write(a[i],' ');
          writeln;
          inc(k);
        end
      else
        for i:=1 to 8 do
          if b[n,i]=0 then
            begin
              a[n]:=i;
              for j:=n+1 to 8 do
                begin
                  b[j,i]:=b[j,i]+1;
                  b[j,i+j-n]:=b[j,i+j-n]+1;
                  b[j,i-j+n]:=b[j,i-j+n]+1;
                end;
              main(n+1);
              for j:=n+1 to 8 do
                begin
                  b[j,i]:=b[j,i]-1;
                  b[j,i+j-n]:=b[j,i+j-n]-1;
                  b[j,i-j+n]:=b[j,i-j+n]-1;
                end;
              a[n]:=0;
            end;
    end;
begin
  main(1);
  writeln(k);
end.


1楼2007-05-11 13:33回复