实验课程:算法分析与设计
实验名称:回溯法的应用[骑士问题] (综设型实验)
第一部分 实验内容
1.实验目标
(1)熟悉使用回溯法求解问题的基本思路。
(2)掌握回溯算法的程序实现方法。
(3)理解回溯算法的特点。
2.实验任务
(1)从所给定的题目中选择一题,使用回溯法求解之。
(2)用文字来描述你的算法思路,包括解空间、限界函数、算法主要步骤等。
(3)使用C/C++语言编程实现算法。
(4)记录运行结果,包括输入数据,问题解答及运行时间。
(5)分析算法最坏情况下时间复杂度和空间复杂度。
(6)谈谈实验后的感想,包括关于该问题或类似问题的求解算法的建议。
3.实验设备及环境
PC;C/C++等编程语言。
4.实验主要步骤
(1) 根据实验目标,明确实验的具体任务;
(2) 设计求解问题的回溯算法,并编写程序实现算法;
(3) 设计实验数据并运行程序、记录运行的结果;
(4) 分析算法时空性能;
(5) 实验后的心得体会。
第二部分 问题及算法
1. 问题描述
[骑士问题]:在n*n的棋盘上,指定马的初始位置,按照马跳日的规则,给出马跳过棋盘每格恰好一次最后回到出发位置的一种跳法。
2.回溯法的一般思路
骑士问题,即马周游棋盘,也就是要遍历棋盘中的所有格子有且只能一次,那么很显然就是一个图的遍历问题了。
3.求解问题的回溯算法描述
1、使用Warnsdorff's rule。在当前位置(Now)考虑下一个位置(Next)的时候,优先选择下一个的位置(Next)走法最少的那个。作为当前位置(Now)的下一位置(Next)。
譬如说:当前位置现在要确定下一位置,那么就要所有的下一个位置进行考察,看看假如走到下一个位置,它的下一个位置又有多少种走法,选择下一个位置可能走法最少的作为当前位置(Now)的下一个位置