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

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

ID:6355737

大小:65.50 KB

页数:8页

时间:2018-01-11

回溯法的应用(实验报告)_第1页
回溯法的应用(实验报告)_第2页
回溯法的应用(实验报告)_第3页
回溯法的应用(实验报告)_第4页
回溯法的应用(实验报告)_第5页
资源描述:

《回溯法的应用(实验报告)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、华南师范大学本科生实验报告姓名_张俊发_学号20082101032院系_计算机学院_专业_计算机科学与技术_年级2008级班级_2班_小组实验任务分工_独立完成实验时间2010年_6_月1_日实验名称回溯法的应用指导老师及职称陈振洲华南师范大学教务处编印实验课程:算法分析与设计实验名称:回溯法的应用(综设型实验)第一部分实验内容1.实验目标(1)熟悉使用回溯法求解问题的基本思路。(2)掌握回溯算法的程序实现方法。(3)理解回溯算法的特点。2.实验任务(1)从所给定的题目中选择一题,使用回溯法求解之。(2

2、)用文字来描述你的算法思路,包括解空间、限界函数、算法主要步骤等。(3)在Windows环境下使用C/C++语言编程实现算法。(4)记录运行结果,包括输入数据,问题解答及运行时间。(5)分析算法最坏情况下时间复杂度和空间复杂度。(6)谈谈实验后的感想,包括关于该问题或类似问题的求解算法的建议。3.实验设备及环境PC;C/C++等编程语言。4.实验主要步骤(1)根据实验目标,明确实验的具体任务;(2)设计求解问题的回溯算法,并编写程序实现算法;(3)设计实验数据并运行程序、记录运行的结果;(4)分析算法时

3、空性能;(5)实验后的心得体会。第二部分问题及算法1.问题描述国际象棋的棋盘上有八八六十四个格子(这里简化为5*6=30个格子),黑白相间,棋子放在格子中.棋中的马走“日”字,即横二竖一,或横一竖二.马从棋盘的某个格子出发,走29步,是否能走过其他29个格子各一次?如果能够,则说存在一条马的周游路线.如果马从某个格子出发,不重复地走过了其余29个格子,第30步又回到了出发点,则说存在一条马的周游闭路.按照从上到下,从左到右对棋盘的方格编号,如下所示:1     2     3     4    5   

4、  67     8     9     10    11    1213    14     15    16     17    1819    20      21    22     23    2425    26      27    28     29    30马的走法是“日”字形路线,例如当马在位置15的时候,它可以到达2、4、7、11、19、23、26和28。但是规定马是不能跳出棋盘外的,例如从位置1只能到达9和14。2.回溯法的一般思路对于用回溯法求解的问题,首先要将问题进行适当的

5、转化,得出状态空间树。这棵树的每条完整路径都代表了一种解的可能。通过深度优先搜索这棵树,枚举每种可能的解的情况;从而得出结果。回溯法中,首先需要明确下面三个概念:(一)约束函数:约束函数是根据题意定出的。通过描述合法解的一般特征用于去除不合法的解,从而避免继续搜索出这个不合法解的剩余部分。因此,约束函数是对于任何状态空间树上的节点都有效、等价的。(二)状态空间树:刚刚已经提到,状态空间树是一个对所有解的图形描述。树上的每个子节点的解都只有一个部分与父节点不同。(三)扩展节点、活结点、死结点:所谓扩展节点

6、,就是当前正在求出它的子节点的节点,在DFS中,只允许有一个扩展节点。活结点就是通过与约束函数的对照,节点本身和其父节点均满足约束函数要求的节点;死结点反之。由此很容易知道死结点是不必求出其子节点的(没有意义)。2.求解问题的回溯算法描述Backtrack(x,y,dep);(1)棋盘board[5][6]每个点初始化为0,输入起始点的坐标x,y,棋盘起始点board[x][y]赋值为1,保存起始点坐标为xstart,ystart,步数dep赋值为1。(2)每个点从八个方向去试探,若全部试完则转(7)。

7、(3)通过约束函数check(x,y)检查这一步是否还在棋盘内,不是则转(2)。(4)试探成功则,步数+1,board[x][y]=dep,前进一步再试探即递归调用Backtrack(x,y,dep);(5)正确解(步数等于30,下一步可以回到起始点)还未找到则转(2)。(6)已找到一种解则记录并打印。(7)退回一步(回溯),若未退到头则转(2)。(8)已退到头则结束或打印无解。1.算法实现的关键技巧棋中的马走“日”字,即横二竖一,或横一竖二,在每个点都有八个方向可以走,用一个二维数组dir[8][2]

8、={-1,-2,1,-2,2,-1,2,1,1,2,-1,2,-2,1,-2,-1}表示八个方向,则下一步可表示为x=x+dir[i][0],y=y+dir[i][1](0<=i<8)。遍历每个方向时要用约束函数chack(x,y)检查点是否合法,即0<=x<5,0<=y<6。第三部分实验结果与分析1.实验数据及结果118722316827217122319302161542692813241129202510514211217227618

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。