日期:2011-03-20 18:14:00 来源:本站整理
<b>基于Delphi的"八皇后"问题动态实现</b>[Delphi编程]
本文“<b>基于Delphi的"八皇后"问题动态实现</b>[Delphi编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
择要 关于八皇后问题的实现,假如结合动态的图形演示,则可以使算法的描写更形象、更活泼,使讲授能产生杰出的效果.
关键词 八皇后问题 冲突 数据构造 线程类
八皇后问题是一个陈腐而闻名的问题,是回溯算法的典型例题.该问题是十九世纪闻名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能彼此攻击,即肆意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法.
下面用delphi6实现的八皇后问题的动态图形程序,可以演示全部的92组解.八皇后问题动态图形的实现,主要应办理以下几个问题.
冲突
包含行、列、两条对角线:
(1)列:规定每一列放一个皇后,不会造成列上的冲突;
(2)行:当第i行被某个皇后占据后,则同一行上的全部空格都不能再放皇后,要把以i
为下标的标志置为被占据状况;
(3)对角线:对角线有两个方向.在同一对角线上的全部点(设下标为(i,j)),要末(i+j)是常数,要末(i-j)是常数.因此,当第i个皇后占据了第j列后,要同时把以(i+j)、(i-j)为下标的标志置为被占据状况.
数据构造
为了对该问题的履行历程举行掌握,需将该问题中的主要数据及呼应的操作定义成一个线程类.办法:在New菜单中单击Other选项,在对话框中选Thread object,在classs name中输线程类的类名.具体定义以下:
type Tbhh = class(TThread) private 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; |
办理冲突的具体函数
function 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 TForm1.PaintBox1Click(Sender: TObject); var q:tbitmap; begin q:=tbitmap.create; q.loadfromfile('e:\八皇后\backimg.bmp'); paintbox1.canvas.Draw(0,0,q); end; end. |
组件设置
paintbox1:画图板,显示当前的合理筹划.
Label1:文字标签,显示当前合理筹划的序号.
Button1,button2,button3,button4:开始、单幅、持续、退出按纽.
以上是“<b>基于Delphi的"八皇后"问题动态实现</b>[Delphi编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论