⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nqueenu.~pas

📁 n后问题,有界面。
💻 ~PAS
字号:
unit NqueenU;

interface

uses
  Classes,Graphics;

type
  TNQueen = class(TThread)
  private
    { Private declarations }
    a:array[1..8,1..8]of integer;
    tt:integer;
    q,c:Tbitmap;
    procedure prt;
    function pd(i,j:integer):boolean;
    procedure hsu(i:integer);
  protected
    procedure Execute; override;
  public
    constructor create(flag:boolean);
 end;
 var
    dstep:boolean;
implementation

uses MainU;

{ Important: Methods and properties of objects in visual components can only be
  used in a method called using Synchronize, for example,

      Synchronize(UpdateCaption);

  and UpdateCaption could look like,

    procedure TNQueen.UpdateCaption;
    begin
      Form1.Caption := 'Updated in a thread';
    end; }

{ TNQueen }

procedure TNQueen.Execute;
begin
  { Place thread code here }
  hsu(1);
  form1.button1.enabled:=true;
  form1.button2.enabled:=false;
  form1.button3.enabled:=false;
end;
function TNQueen.pd(i,j:integer):boolean;
  var i1,j1:integer;
begin
  pd:=true;
  if i<>1 then
  begin
    for i1:=1 to i-1 do
      for j1:=1 to 8 do
        if a[i1,j1]=1 then
        begin
          if j1=j then
            pd:=false
          else
            if abs(i1-i)=abs(j1-j)then
              pd:=false
        end
  end 
end;

procedure TNQueen.prt;//显示
  var i,j,ix,iy:integer;
  s:real;iis:string[2];
begin
  str(tt:2,iis);
  form1.label1.caption:='第'+iis+'幅';
  form1.paintbox1.canvas.draw(0,0,q);
  for i:=1 to 8 do
    for j:=1 to 8 do
      if a[i,j]=1 then
      begin
        ix:=(i-1)*50+1;
        iy:=(j-1)*50+1;
        form1.paintbox1.canvas.draw(iy,ix,c);
      end;
      if dstep=true then
        suspend
      else
        begin
          s:=10;
          for i:=1 to 100000 do
            s:=s*s/s
        end;
end;

procedure TNQueen.hsu(i:integer);//回溯求解
   var j:integer;
begin
   if i>8 then
   begin
     tt:=tt+1;
     synchronize(prt)
   end
   else
      for j:=1 to 8 do
      begin
        a[i,j]:=1;
        if pd(i,j) then
           hsu(i+1);
           a[i,j]:=0;
      end
end;

constructor TNQueen.create(flag:boolean);//创建该线程的一实例并对有关的变量进行初始化
  var i,j:integer;
begin
  inherited create(flag);
  //q:=tbitmap.create;q.loadfromfile('e:\八皇后\backing.bmp');
  c:=tbitmap.create;
  c.loadfromfile('queen.bmp');
  for i:=1 to 8 do
   for j:=1 to 8 do
     a[i,j]:=0; tt:=0;
end;
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -