n皇后问题

program bahaunghou;
var
  n,sum,i:longint;
  b1:array[1..100]of boolean;
  a:array[1..100]of longint;

procedure print;
var
 i:longint;
begin
   for i:=1 to n do   write(a[i]);
    writeln;
end;



function check(k:longint):boolean;
var
   i:longint;
begin
     check:=false;
     for i:=1 to k-1 do
      if abs(i-k)=abs(a[i]-a[k]) then exit;
     check:=true;
end;

procedure play(k:longint);
var
 i:longint;
begin
        if k=n+1 then begin inc(sum);print;exit;end;

        for i:=1 to n do
        if (b1[i])then
         begin
              a[k]:=i;
              b1[i]:=false;
              if check(k) then play(k+1);
              b1[i]:=true;
         end;
end;


begin
        assign(input,'win.in');
        assign(output,'win.out');
        reset(input);
        rewrite(output);

        readln(n);

        //init;'
        for i:=1 to n do b1[i]:=true;

        play(1);

        writeln(sum);
        close(input);
        close(output);
end.

  

posted @ 2012-03-28 13:41  翱翔的感觉  阅读(115)  评论(0)    收藏  举报