15数码问题的解决算法(算法和具体代码).docVIP

15数码问题的解决算法(算法和具体代码).doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
〈〈人工智能〉〉 题目:15数码问题 实验1: 要求: 采用广度优先算法解决15数码问题,输出扩展结点,步数和最终结果 算法描述: 广度优先搜索,即BFS(Breadth First Search),常常深度优先并列提及。这是 一种相当常用的图算法,其特点是:每次搜索指定点,并将其所有未访问过的近 邻加入搜索队列(而深度优先搜索则是栈),循环搜索过程直到队列为空。 广度优先搜索算法的基本思想:从初始状态出发,按照给定的结点产生式规 则(算符、结点扩展规则)生产第一层结点,每生成一个结点就检查是不是目标 结点,如果是目标结点就搜索结束,如果不是目标结点并且前面没出现过就保存 该结点(入队列);再用产生式规则将所有第一层的结点依次扩展,得到第二层 结点,同时检查是否为目标结点,是目标搜索停止,不是并且没出现过保存(入 队);再把第二层的结点按产生规则扩展生产第三层结点,直至找到目标或所有 的状态找完但找不到目标(队列空)。 特点:先生成深度为1的所有结点,再生产深度为2的所有结点,依次类推。 先横向,再纵向。这种方法找到目标,需要的步数一定最少。 程序算法流程图: 描述: ⑴•把起始结点放到OPEN表中。 (2) •如果OPEN表是个空表,则没有解,失败退出;否则继续。 (3) •把第一个结点从OPEN表中移出,并把它放入CLOSE表的扩展节点表 中O (4) •扩展结点N。如果没有后继结点,则转向步骤(2)。 (5) •把N的所有后继结点放到OPEN表的末端,并提供从这些后继结点回 到N的指针。 (6) •如果N的任意个后继结点是个目标结点,则找到一个解答,成功退出; 否则转向步骤(2)・ 流程图: 起点 输入:初始态intA[N][N]={ {1,2,3,4}, {5,10,6,8}, {0,9,7,12}, {13,14,11,15} }; 目标状态:int B[N][N]={ U,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,0} }; 输出截图: 由于输出的路径节点很多这里只是显示最终结果和步数。 13 14 11 15 1 2 3 4 5 0 7 8 9 6 1 0 1 2 1 3 1 4 1 1 1 12 3 4 5 6 7 8 9 14 10 12 13 0 11 15 12 3 4 5 6 7 8 9 10 11 12 13 14 15 0 ok* steps is 213 Press any key to continue 实验厶 要求: 采用深度优先算法实现15数码问题。 算法描述: 设X是当前被访问顶点,在对X做过访问标记后,选择一条从X出发的 未检测过的边(x, y)o若发现顶点y己访问过,则重新选择另一条从X出发 的未检测过的边,否则沿边(x, y)到达未曾访问过的y,对y访问并将其标 记为己访问过;然后从y开始搜索,直到搜索完从y出发的所有路径,即 访问完所有从y出发可达的顶点之后,才回溯到顶点x,并且再选择一条从 x出发的未检测过的边。上述过程直至从x出发的所有边都己检测过为止。 此时,若X不是源点,则回溯到在X之前被访问过的顶点;否则图中所有 和源点有路径相通的顶点(即从源点可达的所有顶点)都己被访问过,若图G 是连通图,则遍历过程结束,否则继续选择一个尚未被访问的顶点作为新 源点,进行新的搜索过程。 流程图: 描述: (1) •把起始结点放到OPEN表中。如果此结点为一目标结点,则得到一个 解。 (2) •如果OPEN表是个空表,则没有解,失败退出;否则继续。 (3) •把第一个结点从OPEN表中移出,并把它放入CLOSE表中。 (4) •如果结点N的深度等于最大深度,则转向步骤(2)o (5) •扩展结点N,产生其全部后裔,并把它们放入OPEN表的前头。如果没 有后裔,则转向步骤(2)。 (6) •如果N的任意个后继结点是个目标结点,则找到一个解答,成功退出; 否则转向步骤(2) • 流程图: 起点 Q —□ 是否有任何后继节点 为目标节点 输入:初始态intA[N][N]={ U,2,3,4}, {5,10,6,8}, {0,9,7,12}, {13,14,11,15} }; 目标状态:int B[N][N]={ U,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,0} }; 输出截图: 由于输出的路径节点很多这里只是显示最终结果和步数 实验3: 要求: 采用启发式的A星算法实现15数码问题。 算法描述: 启发式搜索算法A, —般简称为A算法,是一种典型的启发式搜索算法。其 基本思想是:定义一个评价函数f,对当前的搜索状态进行评估,找出一个最有 希望的节点來扩展。 评价函数的形式如下: f (n) =g

文档评论(0)

kunpeng1241 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档