首页  编辑  

8皇后问题的非递归程序

Tags: /超级猛料/Alogrith.算法和数据结构/常用算法/   Date Created:

下面是我的8皇后问题的非递归程序,希望可以带出一些讨论算法的人:)

在Borland Pascal 7.0下编译通过

ps:我很懒的,所以没写注释:p

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

{$M 16384,0,655360}

const

 qn=8;

var

 step:integer;

 a:longint;

 i,q:array[1..qn]of integer;

 used1:array[1..qn]of boolean;

 used2:array[2..qn+qn]of boolean;

 used3:array[1-qn..qn-1]of boolean;

procedure out;

var

 i:integer;

begin

 inc (a);

 for i:=1 to qn do write(q[i]:3);

 writeln;

end;

begin

 fillchar (q,sizeof(q),0);

 fillchar (i,sizeof(i),0);

 fillchar (used1,sizeof(used1),false);

 fillchar (used2,sizeof(used2),false);

 fillchar (used3,sizeof(used3),false);

 step:=1;a:=0;

 repeat

   if step>qn then

    begin

      out;

      dec (step);                

      used1[q[step]]:=false;

      used2[q[step]+step]:=false;

      used3[q[step]-step]:=false;

      continue;

    end;

   inc (i[step]);

   if i[step]>qn then

    begin

      i[step]:=0;

      dec (step);

      used1[q[step]]:=false;

      used2[q[step]+step]:=false;

      used3[q[step]-step]:=false;

      continue;

    end;

   if used1[i[step]] or used2[i[step]+step] or used3[i[step]-step] then continue;

   q[step]:=i[step];

   used1[q[step]]:=true;

   used2[q[step]+step]:=true;

   used3[q[step]-step]:=true;

   inc (step);

 until step=0;

 writeln ('Total ',a,' answers.');

end.