人工智能VC++八皇后.ppt

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
人工智能VC八皇后

人工智能——八皇后 指导教师:XX老师 专业:XXXXXXXXX 报告人:五里雾 目录 01 八皇后问题的描述分析 02 递归回溯法 03 爬山法 04 最小冲突的局部搜索法 05 三种算法综合分析 八皇后问题的描述分析 一、八皇后问题的提出 八皇后问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 二、求解八皇后问题的算法 八皇后问题的解法有很多种,如:回溯算法、爬山法、最小冲突法、遗传算法等等。 在一个标准的8X8的棋盘中,八皇后问题共有92个解,其中有12个解是独立的。 八皇后问题的描述分析 三、八皇后问题的解 相互间没有对称关系的解是独立解。 在92个解中,很多解在棋盘上有对称关系,每一个棋子都有8个对称位置,如果一个解和另外一个解所有的棋子都呈同一种对称,那么这两个解之间就是对称关系。虽然一个解可以有8个对称位置,但是有些解经过对称操作后和没有操作前是一样的。 递归回溯法 回溯算法 回溯法是解决八皇后问题的常用方法,其基本思想是确定解空间的组织结构后,回溯法从开始结点(根结点)出发,以深度优先方式搜索整个解空间。这个开始结点成为活结点,同时也成为当前的扩展结点,在当前扩展结点处,搜索向纵深方向移至一个新结点。这个新结点成为新的活结点,并成为扩展结点。如果在当前扩展结点处不能再向纵深方向移动,则当前扩展结点就成为死结点。此时,应往回移动(回溯)到最近的活结点处,并使该结点成为当前的扩展结点。回溯法按上述方式递归地在解空间中搜索,直到找到所要求的解。 回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。 递归回溯法 回溯算法的一般步骤 1.定义一个解空间,它包含问题的解。 2.利用适于搜索的方法组织解空间。 3.利用深度优先法搜索解空间。 4.利用限界函数避免移动到不可能产生解的子空间。 递归回溯法 回溯算法过程描述 1) 算法开始, 清空棋盘,当前行设为第一行,当前列设为第一列 2) 在当前行,当前列的位置上判断是否满足条件(即保证经过这一点的行,列与斜线上都没有两个皇后),若不满足,跳到第4步 3) 在当前位置上满足条件的情形: 在当前位置放一个皇后,若当前行是最后一行,记录一个解; 若当前行不是最后一行,当前行设为下一行, 当前列设为当前行的第一个待测位置; 若当前行是最后一行,当前列不是最后一列,当前列设为下一列; 若当前行是最后一行,当前列是最后一列,回溯,即清空当前行及以下各行的棋盘,然后,当前行设为上一行,当前列设为当前行的下一个待测位置; 以上返回到第2步 4) 在当前位置上不满足条件的情形: 若当前列不是最后一列,当前列设为下一列,返回到第2步; 若当前列是最后一列了,回溯,即,若当前行已经是第一行了,算法退出,否则,清空当前行及以下各行的棋盘,然后,当前行设为上一行,当前列设为当前行的下一个待测位置,返回到第2步; 递归回溯法 递归算法的特点 1.递归就是在过程或函数里调用自身。 2.在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。 3.递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序。 4.在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。所以一般不提倡用递归算法设计程序。 递归回溯法 递归算法的要求 1.每次调用在规模上都有所缩小(通常是减半)。 2.相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入)。 3.在问题的规模极小时必须用直接给出解答而不再进行递归调用,因而每次递归调用都是有条件的(以规模未达到直接解答的大小为条件),无条件递归调用将会成为死循环而不能正常结束。 递归算法所体现的“重复”一般有三个要求: 递归回溯法 八皇后递归算法流程图 八皇后VC++递归回溯算法实现 建立基于对话框的MFC应用程序 在对话框上面画出需要的控件并关联成员变量 在OnPaint()函数中编辑代码,绘制棋盘 初始化棋盘和需要的变量 递归回溯主函数 编辑一个Draw()函数,实现位图的摆放。 编辑按钮的响应函数,实现功能。 运行! 爬山法 爬山法是一个向值增加的方向持续移动的简单循环,它将会到达一个“峰顶”时终止,相邻状态中没有比它更高的值。这种算法不维护搜索树,因此当前节点的数据结构只需记录当前的状态和它的目标函数值。爬山法不会前瞻与当前状态不直接相邻的那些状态的值,就像健忘的人攀登珠穆朗玛峰一样。 爬山法 爬山法原理:设爬山者最初位于P

文档评论(0)

153****9595 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档