正文

整理我以前的PASCAL源程序-八皇后问题(4)拉斯维加斯算法2010-08-22 17:40:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/jtchang/51693.html

分享到:

在N*N的棋盘上放上N个皇后,使任意两个皇后都不会互相攻击。 有时一个问题的情况比较复杂、答案又很多,我们却苦于连一种解都找不到。用回溯法未必能等得来。用拉斯维加斯算法不失为一个好办法。 (*     Question Eight Queens.     Arithmetic Las Vegas.     Programmed by j.t.Chang. *) program LV_queens; const      N=50;                         var     x:array[1..N] of integer;     i:integer; procedure PrintResult; var     i: integer; begin     for i:=1 to N do write(x[i]:4);     Readln; end; function place(k: integer): boolean; var     j:integer; begin     for j:=1 to k-1 do       if (abs(k-j)=abs(x[k]-x[j])) or (x[k]=x[j]) then         begin             place:=false;             exit;         end;      place:=true; end; function queensLV: boolean; var     k,i,j,count: integer; begin      k:=1;     count:=1;      randomize;      while (k<=N) and (count>0) do      begin          count:=0;          for i:=1 to N do            begin              x[k]:=i;              if place(k) then                begin                    count:=count+1;                    if random(count)=0 then  j:=i;                end;            end;         if count>0 then           begin              x[k]:=j;              k:=k+1;           end;      end;    queensLV:= count>0 ; end; begin      writeln('Finding one answer of question ',N,' queens.');      writeln('Please wait...');      for  i:=1 to N do x[i]:=0;      while not queensLV do;      PrintResult; end.  

阅读(1744) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册