c语言回溯实验报告,回溯法的应用(实验报告)

62e50291a81fc54b507f33cb80033297.gif 回溯法的应用(实验报告)

(9页)

c6e65c614d379e7213eb59c419747603.gif

本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!

11.9 积分

华南师范大学本科生实验报告姓名_张俊发_学号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实验主要步骤1根据实验目标,明确实验的具体任务;2设计求解问题的回溯算法,并编写程序实现算法;3设计实验数据并运行程序、记录运行的结果;4分析算法时空性能;5实验后的心得体会。第二部分问题及算法1问题描述国际象棋的棋盘上有八八六十四个格子这里简化为5630个格子,黑白相间,棋子放在格子中棋中的马走“日”字,即横二竖一,或横一竖二马从棋盘的某个格子出发,走29步,是否能走过其他29个格子各一次如果能够,则说存在一条马的周游路线如果马从某个格子出发,不重复地走过了其余29个格子,第30步又回到了出发点,则说存在一条马的周游闭路按照从上到下,从左到右对棋盘的方格编号,如下所示123456789101112131415161718192021222324252627282930马的走法是“日”字形路线,例如当马在位置15的时候,它可以到达2、4、7、11、19、23、26和28。但是规定马是不能跳出棋盘外的,例如从位置1只能到达9和14。2回溯法的一般思路对于用回溯法求解的问题,首先要将问题进行适当的转化,得出状态空间树。这棵树的每条完整路径都代表了一种解的可能。通过深度优先搜索这棵树,枚举每种可能的解的情况;从而得出结果。回溯法中,首先需要明确下面三个概念(一)约束函数约束函数是根据题意定出的。通过描述合法解的一般特征用于去除不合法的解,从而避免继续搜索出这个不合法解的剩余部分。因此,约束函数是对于任何状态空间树上的节点都有效、等价的。(二)状态空间树刚刚已经提到,状态空间树是一个对所有解的图形描述。树上的每个子节点的解都只有一个部分与父节点不同。(三)扩展节点、活结点、死结点所谓扩展节点,就是当前正在求出它的子节点的节点,在DFS中,只允许有一个扩展节点。活结点就是通过与约束函数的对照,节点本身和其父节点均满足约束函数要求的节点;死结点反之。由此很容易知道死结点是不必求出其子节点的(没有意义)。2求解问题的回溯算法描述BACKTRACKX,Y,DEP1棋盘BOARD56每个点初始化为0,输入起始点的坐标X,Y,棋盘起始点BOARDXY赋值为1,保存起始点坐标为XSTART,YSTART,步数DEP赋值为1。2每个点从八个方向去试探,若全部试完则转7。3通过约束函数CHECKX,Y检查这一步是否还在棋盘内,不是则转2。4试探成功则,步数1,BOARDXYDEP,前进一步再试探即递归调用BACKTRACKX,Y,DEP5正确解(步数等于30,下一步可以回到起始点)还未找到则转2。6已找到一种解则记录并打印。7退回一步(回溯),若未退到头则转2。8已退到头则结束或打印无解。3算法实现的关键技巧棋中的马走“日”字,即横二竖一,或横一竖二,在每个点都有八个方向可以走,用一个二维数组DIR82{1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1}表示八个方向,则下一步可表示为XXDIRI0,YYDIRI10N||BM||A0||B0||CHESSBOARDAB0RETURN0ELSERETURN1}VOIDHORSEINTX,INTY,INTDEP{INTIIFDEPNM{FORI0I8I{IFXDIRI0XSTARTRETURN}}}ELSE{FORI0I8I{IFCHECKXDIRI0,YDIRI1{XXDIRI0YYDIRI1CHESSBOARDXYDEP1HORSEX,Y,DEP1IFFLAGBREAKCHESSBOARDXY0XXDIRI0YYDIRI1}}}}VOIDCHORSE2DLGONBUTSTART{//TODOADDYOURCONTROLNOTIFICATIONHANDLERCODEHEREINTI,JUPDATEDATAXSTARTM_XYSTARTM_YFORI0IMI{FORJ0JNJCHESSBOARDJI0}FLAG0CHESSBOARDXSTARTYSTART1HORSEXSTART,YSTART,1DATAOUTPUT}VOIDCHORSE2DLGDATAOUTPUT{CSTRINGTEMP_T““INTI,JM_EDIT_T““FORI0IMI{FORJ0JNJ{TEMPFORMAT“7D“,CHESSBOARDJIM_EDITTEMP}M_EDIT“\R\N\R\N\R\N“}UPDATEDATAFALSE}参考文献算法设计技巧与分析沙特MHALSUWAIYEL著 关 键 词: 回溯 应用 实验 报告

524d6daf746efaa52c3c71bbfe7ba172.gif  天天文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值