八皇后问题的三种方案及其程序设计.pdf
《八皇后问题的三种方案及其程序设计.pdf》由会员分享,可在线阅读,更多相关《八皇后问题的三种方案及其程序设计.pdf(4页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 1994-2010 China Academic Journal Electronic Publishing House.All rights reserved.http:/收稿日期:20020405作者简介:彭学君(1972),男,河北阜城人,在职研究生,衡水师专计算机中心讲师,主要从事计算机科学与信息经济开发研究.第18卷第4期2002年12月德 州 学 院 学 报Journal of Dezhou UniversityVol.18 No.4Dec.2002八皇后问题的三种方案及其程序设计彭学君(衡水师专计算机中心,河北衡水 053000)摘 要:八皇后问题是各类语言程序设计中的较著名的
2、题目.关于八皇后问题的编程解多种多样,涉及BASIC、C、PASCAL等,但多是就事论事,缺少相应的比较、分析、综合.文中以非递归算法、递归算法、动态图形实现三种方案分别讨论了八皇后问题及其相应程序设计的具体实现.关键词:八皇后问题;递归算法;程序设计中图分类号:TP311.11 文献标识码:A 文章编号:1004-9444(2002)04-0051-04 八皇后问题是各类语言程序设计中的较著名的题目.该问题由19世纪著名的数学家高斯在1850年提出:在88格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法.在计算机等级考试(二级或
3、上二级以上)或是中学编程竞赛中,甚至成人的职称计算机考试,不时出现与之相关或相近的题目类型.而关于八皇后问题的编程解多种多样,涉及BASIC、C、PAS2CAL等,但多是就事论事,缺少相应的比较、分析、综合.为此,笔者以非递归算法、递归算法、动态图形实现三种方案分别讨论了八皇后问题及其相应程序设计的具体实现.1 一种递归的方法 回溯法求解在程序设计中有一种方法叫做”回溯法”.它不是按照某种公式或确定的法则,求问题的解,而是通过试探和纠正错误的策略,找到问题的解.在理论上来说,就是在一棵搜索树中从根结点出发,找到一条达到满足某条件的子结点的路径.在此例中皇后的位置有一个一维数组来存放A(I)=J
4、表示皇后放在第I行,第J列.下面主要来看看怎么样判断皇后是否安全的问题.1)首先,用一维数组来表示,已经解决了不在同一行的问题.2)对于列可以引进一个标志数组CJ ,若J列上已放了皇后,则CJ =FALSE.3)对于左上右下的对角线I-J为一常量,位于-7,+7之间,在此引入标志数组L-7.7;对于左下右上的对角线,类似的有I+J等于常量,用数组R2.16来表示.当在第I行,第J列上放置了皇后,则只需设置:CJ :=FALSE;L I-J :=FLASE;R I+J :=FALSE就可以解决皇后的安全问题了.3338queens.pas333Program eightqueens;var co
5、nt,i:integer;q:boolean;a:array 1.8 of byte;c:array 1.8 ofboolean;l:array-7.7 of boolean;r:array2.16of boolean;procedure pr;var i:integer;begin 1994-2010 China Academic Journal Electronic Publishing House.All rights reserved.http:/for i:=1 to 8 do write(ai4);inc(cont);writeln(cont=,cont);end;procedur
6、e try(i:integer);var j:integer;procedure erase(i:integer);begincj:=true;li-j:=true;ri+j:=true;end;beginfor j:=1 to 8 dobeginif cj and li-j and ri+j thenbeginai:=j;cj:=false;li-j:=false;ri+j:=false;if i 8 then try(i+1)else pr;erase(i);end;end;end;333333333main33333333beginfor i:=1 to 8 do ci:=true;fo
7、r i:=-7 to 7 do li:=true;for i:=2 to 16 do ri:true;cont:=0;i:=1;try(i);readln;end.用递归算法编制的程序具有结构清晰与可读性高的优点,同时也存在执行效率不高的缺点.当能够找到明显的递推公式用迭代法求解时,迭代法的效率会比递归方法高很多.2 一种非递归的算法该程序平台为C/C+语言,具体算法过程参阅程序实现中的相应注释部分.#include#include#define available 1/用来标志该位是否可用,availabel表示可用,unailable表示不可用#define unavailable 0#d
8、efine true 1#define false 0int j,top=-1,flag,i,is-pop,total=0;/top用来保存栈顶指针,flag用来说明该次是否成功下了一个皇后/is-pop用来说明是否把栈弹出,total用来保存共有多少种下法/i用来保存下一次皇后应下的列int stack8,a15,b15,c7;/stack保存皇后的位置,a,b,c三个数住用来保存该位是否可以下皇后void init(void);/初始化各位状态,使之可以下皇后void release(void);/当该列都不能下皇后,则解除上次下皇后试对相关位的锁定main()cout init();is
9、-pop=false;/初始化for(;)do for(j=is-pop?stacki+1:0;j =7;j+)if(a i+j&b i-j+7&cj)/判断该位是否可用/若可用,则栈顶指针上移,在该位存入皇后号top+;stacktop =j;ai+j =bi-j+7 =cj =un2available;/并把相关位设为不可用i+;/i指向下一个应填入皇后的列flag=true;/设标志,说明成功is-pop=false;break;/则直接退出循环if(!flag)/若不成功,则释放被锁定的位release();flag=false;if(stack0+1=8&top=-1)/若第一列也没
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 皇后 问题 方案 及其 程序设计
限制150内