[算法设计与分析] 回溯法求解骑士问题/马周游问题 (C++)

本文介绍了如何运用回溯法解决骑士周游棋盘问题,实验目标包括理解和实现回溯算法,分析算法性能。实验详细描述了算法思路,包括Warndorff's rule的剪枝策略,并提供了C++编程实现。实验结果显示,对于8*8棋盘,从(1,1)开始,马可以恰好访问每个方格一次并回到起始位置。虽然超过20的棋盘执行效率较低,但通过学习回溯法,作者认识到其复杂性和潜力,并期待未来的优化。" 80920337,7734972,Fortran实现快速排序与冒泡排序解析,"['Fortran', '快速排序', '数据结构', '算法']
摘要由CSDN通过智能技术生成

实验课程:算法分析与设计

实验名称:回溯法的应用[骑士问题] (综设型实验)

 

第一部分 实验内容

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)的下一个位置

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值