基于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;

时间: 2024-11-03 09:24:03

基于Delphi的八皇后问题动态实现的相关文章

python基于右递归解决八皇后问题的方法

  本文实例讲述了python基于右递归解决八皇后问题的方法.分享给大家供大家参考.具体分析如下: 凡是线性回溯都可以归结为右递归的形式,也即是二叉树,因此对于只要求一个解的问题,采用右递归实现的程序要比回溯法要优美的多. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 def Test(queen,n): '''这个就不用说了吧,就是检验第n(下标,0-7)行皇后的位置是否合理''' q=que

也来说一下八皇后问题

       (本文的所有代码均是基于此文:http://blog.csdn.net/mbh_1991/article/details/23869459,感谢博主的贡献!)          最近看了一篇文章(见上面给出的链接),里面讲到了回溯算法和八皇后问题.仔细阅读全文之后,发现作者所写与实际开发工作还是有一定的差别,因此特发此文,表达一下个人的看法,请各位批评指正.        什么是回溯算法?举个例子来说,当你走到一个有很多岔路的路口,不知道哪条路是通的,于是,你随便选择了一条,当走到

八皇后问题的C#解答

解答|问题 改编自V星[视窗王子]应答程序,如下:<br><br>using System;<br>class Queen{<br>    const int SIZE = 8;//皇后数<br>    public static void Main()<br>    {<br>        int[] Queen = new int [SIZE];//每行皇后的位置<br>        int y,x,i

UVa 639:Don&#039;t Get Rooked, 类八皇后问题

题目链接: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=108&page=show_problem&problem=580 题目类型: 暴力, 回溯法 题目: In chess, the rook is a piece that can move any number of squares vertically or horizontally. In this p

UVa 167:The Sultan&#039;s Successors, 八皇后问题

题目链接: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=108&page=show_problem&problem=103 题目类型: 回溯 原题: The Sultan of Nubia has no children, so she has decided that the country will be split into up to k separate

常用算法:C#八皇后问题

八皇后问题是一个古老而著名的问题,是回溯算法的典型应用.八皇后问题就是棋盘上的8个皇后不能在同一行.一列或一条斜线上,在8!=40320种排列中共有92种解决方案.代码如下: using System; using System.Collections.Generic; using System.Text;namespace ExQueen { class Queen { public void QueenArithmetic(int size){ int[] Queen = new int[s

javascript递归回溯法解八皇后问题

  javascript递归回溯法解八皇后问题:           网上看到许多关于八皇后算法的文章,很少能看到使用javascript来实现的,今天就给大家使用javascript来解决下这个问题,有需要的小伙伴可以参考下. 下面给大家分享的是回溯法解八皇后, 带详细注解,这里就不多废话了. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36

c语言-C++中的八皇后问题,编译通过了,但执行的时候为什么直接显示按任意键返回

问题描述 C++中的八皇后问题,编译通过了,但执行的时候为什么直接显示按任意键返回 #include//8*8的棋盘 #define max 8 int i,j; int e,s; char queen[max][max]; int main() { void fz(); void put(); void check(); void show(); void checkandput(); void checkagain(); for(i=0;i<max;i++) for(j=0;j<max;j

swift未解决八皇后的问题代码

问题描述 swift未解决八皇后的问题代码 首先提一下八皇后的问题:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法. 代码问题:用下面我自己的方法实现的八皇后,结果出现了无尽的循环.可能是思路还是哪里的不严谨?请教大伙帮忙改改!我已经尽力了... 注:代码可以直接粘贴复制进xcode的playground进行测试! class ChessBoard { var limit: Intvar queens = [Queen](