美文网首页
用栈来求解汉诺塔问题

用栈来求解汉诺塔问题

作者: CSDN学院 | 来源:发表于2018-05-22 21:27 被阅读0次

【题目】

汉诺塔问题比较经典,这里修改一下游戏规则:现在限制不能从最左侧的塔直接移动到最右侧,也不能从最右侧直接移动到最左侧,而是必须经过中间。求当塔有N层的时候,打印最优移动过程和最优移动总步数。

例如,当塔数为两层时,最上层的塔记为1,最下层的塔记为

2,则打印:

请点击此处输入图片描述

请点击此处输入图片描述

注意:关于汉诺塔游戏的更多讨论,将在本书递归与动态规划的章节中继续。

【要求】

用以下两种方法解决。

方法一:递归的方法;

方法二:非递归的方法,用栈来模拟汉诺塔的三个塔;

本文将讲述方法一:

【解答】

方法一:递归的方法。

首先,如果只剩最上层的塔需要移动,则有如下处理

1.如果希望从“左”移到“中”,打印“Move1 from left to mid”。

2.如果希望从“中”移到“左”,打印“Move1 from mid to left”。

3.如果希望从“中”移到“右”,打印“Move1 from mid to right”。

4.如果希望从“右”移到“中”,打印“Mve1 from right to mid”。

5.如果希望从“左”移到“右”,打印"Move1 from left to mid”和"Move1 from mid to right"。

6.如果希望从“右”移到“左”,打印“Move1 from right to mid"和“Move1 from mid to left”。

以上过程就是递归的终止条件,也就是只剩上层塔时的打印过程。

接下来,我们分析剩下多层塔的情况。

如果剩下N层塔,从最上到最下依次为1~N,则有如下判断:

1.如果剩下的N层塔都在“左”,希望全部移到“中”,则有三个步骤。

1)将1~N-1层塔先全部从“左”移到“右”,明显交给递归过程。

2)将第N层塔从“左”移到“中”。

3)再将1~N-1层塔全部从“右”移到“中”,明显交给递归过程。

2.如果把剩下的N层塔从“中”移到“左”,从“中”移到“右”,从“右”移到“中”,过程与情况1同理,一样是分解为三步,在此不再详述。

3.如果剩下的N层塔都在“左”,希望全部移到“右”,则有五个步骤。

1)将1~N-1层塔先全部从“左”移到“右”,明显交给递归过程。

2)将第N层塔从“左”移到“中”。

3)将1~N-1层塔全部从“右”移到明显交给递归过程。

4)将第N层塔从“中”移到“右”。

5)最后将1~N-1层塔全部从“左”移到“右”,明显交给递归过程。

4.如果剩下的N层塔都在“右”,希望全部移到“左”,过程与情况3同理,一样是分解为五步,在此不再详述。

以上递归过程经过逻辑化简之后的代码请参看如下代码中的hanoi Problem1方法。

请点击此处输入图片描述

请点击此处输入图片描述

欢迎一起来交流代码那点事:https://mp.csdn.net/postedit/80325970?utm_source=zwqt

请点击此处输入图片描述

相关文章

  • 用栈来求解汉诺塔问题

    【题目】 汉诺塔问题比较经典,这里修改一下游戏规则:现在限制不能从最左侧的塔直接移动到最右侧,也不能从最右侧直接移...

  • 用栈来求解汉诺塔问题

    题目 在汉诺塔规则的基础上,限制不能从最左的塔移动到最右的塔上,必须经过中间的塔,移动的跨度只能是一个塔。当塔有N...

  • 递归求解汉诺塔问题

    数据结构习题解析・邓俊峰 课后习题 问题有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次...

  • 汉诺塔问题(递归求解)

  • 递归算法求解汉诺塔问题

    Hanoi(汉诺)塔问题,这是一个古典的数学问题。古印度有一个梵塔,塔内有3个柱子A,B,C,开始时A柱上套有64...

  • 汉诺塔-Java实现

    汉诺塔总步数:2^n -1 引入栈来表示移动wafer步骤 程序打印结果

  • 用栈取代函数递归

    文章目录 1.用栈实现汉诺塔问题: DOMOVE相当于一步移动,DOTOH相当于一次递归 2.用栈实现求斐波拉契数...

  • 用栈代替递归之汉诺塔问题

    问题描述 递归解法 运行结果 手工解法 非递归解法 运行结果 递归中的栈

  • 汉诺塔递归求解

    相关链接 汉诺塔的移动也可以看做是递归函数。我们对柱子编号为a, b, c,将所有圆盘从a移到c可以描述为:如果a...

  • 汉诺塔问题与递归

    文章也同时在个人博客 http://kimihe.com/更新 汉诺塔问题(Hanoi Tower) 汉诺塔问题的...

网友评论

      本文标题:用栈来求解汉诺塔问题

      本文链接:https://www.haomeiwen.com/subject/bcnkjftx.html