ImageVerifierCode 换一换
格式:DOC , 页数:3 ,大小:39.50KB ,
资源ID:11385810      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-11385810.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(--八皇后问题--回溯算法.doc)为本站会员(HR专家)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

--八皇后问题--回溯算法.doc

1、八皇后问题问题描述八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。该问题是十九世纪著名的数学家高斯1850年提出:在88格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。问题分析所谓回溯就是走回头路,该方法是在一定的约束条件下试探地搜索前进,若在前进中受阻,则回头另择通路继续搜索。为了能够沿着原路逆序回退,须用栈保存曾经到达的每一个状态,栈顶的状态即为回退的第一站。因此回溯法均可用栈来实现。现在我们利用回溯

2、算法求出其中一种解。其算法的基本思想如下: 从第一行起逐行放置皇后,每放置一个皇后均要依次对第1,2,8列进行试探,并尽可能取小的列数。若当前试探的列位置是安全的,即不与已放置的其他皇后冲突,则将该行的列位置保存在栈中,然后继续在下一行上寻找安全位置;若当前试探的列位置不安全,则用下一列进行试探。当8列位置试探完毕都未找到安全位置时,就退栈回溯到上一行,重新对下一列进行试探,直到找到问题的解。图1为八皇后问题的一种解。怎样判断一个位置是安全的?为解决这个问题,我们对棋盘进行分析,将棋盘横坐标定为i,纵坐标定为j,i和j的取值范围是从到。当某个皇后占了位置(i,j)时,在这个位置的垂直方向、水平

3、方向和斜线方向都不能再放其它皇后了。用语句实现,可定义如下三个整型数组:a8,b15,c24。其中,各数组的代表的意义如下:程序实现程序清单如下:#include int a8,b15,c24;int sit8; /*记录8个皇后所在列,并且起到栈的作用*/void EightQueen(void)int i,j;i=1; /*从第一行开始,试探每个皇后的位置*/j=1; /*从第一列开始试探*/while (i=8)while (j=8)if (aj-1+bi+j-2+ci-j+7=3) /*在当前列上寻找安全位置*/break;j+;if (j=8) /*为第i个皇后找到了安全位置*/aj

4、-1=0;bi+j-2=0;ci-j+7=0;/* 皇后移入位置(i,j)*/siti-1=j;/*相当于位置(i,j)进栈*/i+; /*为下一个皇后寻找位置*/j=1;else /*未找到安全位置*/i-;j=siti-1; /*出栈,回溯到上一行 */aj-1=1;bi+j-2=1;ci-j+7=1;/* 移去位置(i,j)上的皇后*/j=j+1; /*从下一列继续探索*/for (i=1;i=8;i+) /*输出第i个皇后所在的列位置 */printf(%1d,%1d) ,i,siti-1);printf(n);int main(void)int i;for (i=0;i=7;i+)

5、ai=1;for (i=0;i=14;i+) bi=1;for (i=0;i=23;i+) ci=1;EightQueen();return 0;程序运行结果:(1,1) (2,5) (3,8) (4,6) (5,3) (6,7) (7,2) (8,4) 上面的程序采用了非递归方法寻找八皇后问题的一种解,要找到八皇后问题的所有解,可通过修改函数EightQueen,使其找到一个解后,程序并不终止,而是打印输出解的信息,然后退栈回溯,继续寻求下一个解;一旦当前行是第1行又仍需退栈回溯时,算法终止。八皇后问题也可采用递归实现,下面的程序是采用递归方法求解八皇后问题的所有解的源程序。#include

6、 int a8,b15,c15,i;int sit8;void EightQueen(int i)int j;for (j=1;j=8;j+)if (aj-1+bi+j-2+ci-j+7=3) /*如果第i列第j行为空*/aj-1=0;bi+j-2=0;ci-j+7=0;/*占用第i列第j行*/siti-1=j;if(i8) EightQueen(i+1); else /*输出一组解*/for (int k=1;k9;k+)printf(%1d,%1d) ,k,sitk-1);printf(n);aj-1=1;bi+j-2=1;ci-j+7=1;int main(void)for (i=0;i=7;i+) ai=1;for (i=0;i=14;i+) bi=1;for (i=0;i=14;i+) ci=1;EightQueen(1);/*调用递归函数*/return 0;

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报