📄 nqueenu.~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 + -