回溯法的应用(实验报告).docVIP

  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文档。上传文档
查看更多
回溯法的应用(实验报告)

华南师范大学本科生实验报告 姓名_张俊发_ 学号 20082101032 院系_计算机学院_ 专业_ 计算机科学与技术 _ 年级 2008级 班级_ 2班 _ 小组实验任务分工_ 独立完成 实验时间 2010 年_6_月 1 _日 实验名称 回溯法的应用 指导老师及职称 陈振洲 华南师范大学教务处编印 实验课程:算法分析与设计 实验名称:回溯法的应用 (综设型实验) 第一部分 实验内容 1.实验目标 (1) 熟悉使用回溯法求解问题的基本思路。 (2)掌握回溯算法的程序实现方法。 (3)理解回溯算法的特点。 2. 实验任务 (1)从所给定的题目中选择一题,使用回溯法求解之。 (2)用文字来描述你的算法思路,包括解空间、限界函数、算法主要步骤等。 (3)在Windows环境下使用C/C++语言编程实现算法。 (4)记录运行结果,包括输入数据,问题解答及运行时间。 (5)分析算法最坏情况下时间复杂度和空间复杂度。 (6)谈谈实验后的感想,包括关于该问题或类似问题的求解算法的建议。 3. 实验设备及环境 PC;C/C++等编程语言。 4. 实验主要步骤 根据实验目标,明确实验的具体任务; 设计求解问题的回溯算法,并编写程序实现算法; 设计实验数据并运行程序、记录运行的结果; 分析算法时空性能; 实验后的心得体会。 第二部分 问题及算法 问题描述 国际象棋的棋盘上有八八六十四个格子(这里简化为5*6=30个格子), 黑白相间, 棋子放在格子中. 棋中的马走“日”字, 即横二竖一, 或横一竖二. 马从棋盘的某个格子出发, 走29 步, 是否能走过其他29 个格子各一次? 如果能够, 则说存在一条马的周游路线. 如果马从某个格子出发, 不重复地走过了其余29个格子, 第30 步又回到了出发点, 则说存在一条马的周游闭路. 按照从上到下,从左到右对棋盘的方格编号,如下所示: 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 马的走法是“日”字形路线,例如当马在位置15的时候,它可以到达2、4、7、11、19、23、26和28。但是规定马是不能跳出棋盘外的,例如从位置1只能到达9和14。 2. 回溯法的一般思路 对于用回溯法求解的问题,首先要将问题进行适当的转化,得出状态空间树。这棵树的每条完整路径都代表了一种解的可能。通过深度优先有哪些信誉好的足球投注网站这棵树,枚举每种可能的解的情况;从而得出结果。 回溯法中,首先需要明确下面三个概念: (一)约束函数:约束函数是根据题意定出的。通过描述合法解的一般特征用于去除不合法的解,从而避免继续有哪些信誉好的足球投注网站出这个不合法解的剩余部分。因此,约束函数是对于任何状态空间树上的节点都有效、等价的。 (二)状态空间树:刚刚已经提到,状态空间树是一个对所有解的图形描述。树上的每个子节点的解都只有一个部分与父节点不同。 (三)扩展节点、活结点、死结点:所谓扩展节点,就是当前正在求出它的子节点的节点,在DFS中,只允许有一个扩展节点。活结点就是通过与约束函数的对照,节点本身和其父节点均满足约束函数要求的节点;死结点反之。由此很容易知道死结点是不必求出其子节点的(没有意义)。 求解问题的回溯算法描述 Backtrack(x,y,dep); (1)棋盘board[5][6]每个点初始化为0,输入起始点的坐标x,y,棋盘起始点board[x][y]赋值为1,保存起始点坐标为xstart,ystart,步数dep赋值为1。 (2)每个点从八个方向去试探,若全部试完则转(7)。 (3)通过约束函数check(x,y)检查这一步是否还在棋盘内,不是则转(2)。 (4)试探成功则,步数+1,board[x][y]=dep,前进一步再试探即递归调用Backtrack(x,y,dep); (5)正确解(步数等于30,下一步可以回到起始点)还未找到则转(2)。 (6)已找到一种解则记录并打印。 (7)退回一步(回溯),若未退到头则转(2)。 (8)已退到头则结束或打印无解。 算法实现的关键技巧 棋中的马走“日”字, 即横二竖一, 或横一竖二,在每个点都有八个方向可以走,用一个二维数组dir

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档