用递归回溯解决迷宫问题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

扬州大学试题纸

(2015-2016 学年第二学期)

ACM竞赛辅导论文报告

学院:信息工程学院

班级:计科1302

学号:*********

*名:***

指导老师:***

用递归回溯解决迷宫问题

盛晓伟(扬州大学计算机科学与技术系扬州225100)

SHENG Xiao-Wei, School of Information Science and Technology, Yangzhou University, Yangzhou 225100, China)

For many practical problems, the solution is to move along a series of orderly decision-making points, each of the choices made at each decision point will lead along a path. If the choice is correct, the problem will be resolved. On the other hand, if you go into a dead end or find that the choice at a certain point is wrong, then you must return to the previous decision point and try another route.. This algorithm is called backtracking algorithm..

If the backtracking algorithm is considered as a continuous process of trying to solve the problem, the process seems to be iterative. However, for most of this problem, the recursive method is more easily solved. The recursive principle point of view is very simple; for a backtracking problem, if and only if at least a word problem solutions can be solved, and these subproblems generated source in the initial of each a possible choice.

Key words: backtracking algorithm: Recursive; Iterative;Maze

摘要:对许多实际问题而言,其解决过程就是沿着一系列有序的决策点前进,在每个决策点所做的每一个选择都会导向沿着某一路径前行。如果选择是正确的,问题将得到解决。从另一方面讲,如果走进了死胡同,或者发现在某个决策点的选择是错误的,那么必须返回到以前的决策点,尝试另一条路径。这中方式的算法称为回溯算法。

如果吧回溯算法看成是一个不断地进行各种尝试直至解决问题的过程,那么这个过程似乎具有迭代性。然而,对大多数这种形式的问题,采用递归方法更容易解决。采用递归原理的着眼点很简单;对于一个回溯问题而言,当且仅当至少有一个字问题有了解决方案后才可能得到解

决,而这些子问题的产生又源于最初所做的每一种可能的选择。

关键词:回溯;递归;迭代;迷宫

1迷宫的神话背景

在希腊神话时代,地中海岛屿中的克里特岛被一个叫弥诺斯的暴君所统治。弥诺斯不时地向雅典索取进贡;年轻男女,用来祭祀弥诺陶洛斯——一个可怕的牛头人身的怪物。为了留住这个可怕地怪物,弥诺斯强迫他的奴隶底得勒斯(这个天才工匠后来凭借自己打造的一对翅膀逃离了那个岛屿)在诺塞斯修建了一个巨大的地下迷宫。那些从雅典来的祭品——年轻男女们被带进迷宫,在他们没找到出口之前就被怪物弥诺陶洛斯给吃掉了。这个阴谋一直在继续,知道雅典年轻的提修斯志愿成为供品之一为止。提修斯听从弥诺斯的女儿阿里阿德妮的建议,带着一把剑和一个线团进入了迷宫。在杀死了怪物之后,提修斯凭借着揭开的线团沿着原路返回。

2.1右手规则

提修斯的方法反映了一个逃离迷宫的规则,但不是每一个处于此类困境的人都很幸运地拥有一个线团或者聪明的伙伴给他提出有效的建议。幸运的是,还有其他逃离迷宫的方法,在这些方法中,最有名的是右手规则,用以下的伪代码形式来表示:

Put your right hand against a wall.

While(you have not yet escaped from the maze)

{

Walk forward keeping your right hand on a wall.

}

当前进时,右手触墙的要求会迫使你转弯,有时还要折回。即便如此,右手规则保证可以在任何迷宫中找到一个通向外界的出口。

想象以下右手规则的操作,假设提修斯现在已经成功地杀死了弥诺陶洛斯,并且就站在用提修斯的名字的第一个字母所标注的位置,那是希腊字母θ,如下图所示:

假使提修斯将他的右手放在墙上,并自此开始遵守右手规则前行,他将

会走过如下图虚线所示的轨迹:

2.2 寻找递归方法

伪代码形式中的while循环清楚表明,右手规则是一种迭代性策略,然而,也可以从递归的角度来考虑迷宫问题的解决过程。要这样做,就要采用一种不同的思维模式,不能再想着找出一条完整的路径来解决问题。相反地,需要从递归的角度将问题简化。一步一个台阶。一旦简化成功,就可以用同样的方法来解决每一个后续的子问题。

回到在右手规则示例所描述的迷宫结构中,将自己置于提修斯的位置。这时有三种选择,如下图箭头所示:

如果有出口,就肯定分布在其中一条路线上。如果选对了方向,那么将向解决方案更靠近一步。因此,沿着那条路走,问题就变得简单起来,这就是递归式解法的关键。这中观点指出了必不可少的递归思维。只有至少解决啦如图1所示的新迷宫中的一个,原来的迷宫才有可能得到解决。每幅图中的X号标明了原始出发点,这是任何递归解法的禁区,

相关文档
最新文档