美文网首页编程基础
#编程基础#算法——Hanoi塔问题

#编程基础#算法——Hanoi塔问题

作者: KomalZheng | 来源:发表于2017-03-21 16:48 被阅读17次

【问题】


a,b,c是三个塔座。开始时,在a上共有n个圆盘,自上而下,圆盘由小到大。编号分别为1,2,...,n. 现在要通过b塔把圆盘从a塔移动到c塔.试写出移动过程hanoi(n,a,b,c).

【解答】


建模

我们记录每一次转移为 x -> y 其中 x~=y, x, y从{a, b, c}中取值
那么问题就是要给出一些列的转移的有序集合,使得按照集合中的步骤,能够将n个盘从a移动到c

这里有3个塔: a、b、c,由于a是起始塔,而c是目标塔,b就是辅助塔,于是需要引入3个变量:起始塔、目标塔、辅助塔
同时还有一个由圆盘组成的堆的概念。有一个变量n用于描述这个堆的大小,因为我们不希望打乱堆的从上到下的圆盘是由小到大的布局,所以,n就唯一决定了这个堆的特性。
显然,我们接触到n这个变量,自然希望使用数学归纳法来解决这样的问题,于是问题,应当考虑将n的情形转化为n-1的情形,从而通过递归完成我们的解决方案。

首先我们假定解决方案是一个关于 n 和 起始塔、辅助塔、目标塔 的函数 hanoi(n, 起始塔, 辅助塔, 目标塔)
表示n个圆盘,从起始塔,通过辅助塔移动到目标塔的解决方案。

那么我们需要求解的问题就是:hanoi(n, a, b, c)

而 hanoi(n, a, b, c)的解决方案是一个步骤方案,于是我们又可以将这个过程视为3大步骤:

  1. 先将a上面的n-1个盘组成的堆从a,借助辅助塔c,转移到b的解决方案hanoi(n-1, a, c, b)
  2. 将第n个盘移动到c: hanoi(1, a, b, c)
  3. 再将b上面的n-1个盘组成的堆从b,借助辅助塔a,转移到c的解决方案hanoi(n-1, b, a, c)

于是递归算法如下:

void LankeHelper::hanoi(int n, char a, char b, char c){
    if(n==1)
    {
        cout<<a<<"->"<<c<<"\n";
    }
    else {
        hanoi(n-1,a,c,b); 
        hanoi(1, a, b, c);
        hanoi(n-1,b,a,c);
     }
}
int _tmain(int argc, _TCHAR* argv[]){ 
    LankeHelper lh;
    lh.hanoi(2,'a','b','c');
    system("pause");
    return 0;
}

相关文章

  • #编程基础#算法——Hanoi塔问题

    【问题】 a,b,c是三个塔座。开始时,在a上共有n个圆盘,自上而下,圆盘由小到大。编号分别为1,2,...,n....

  • C语言-汉诺(Hanoi)塔问题-递归实现

    问题描述:汉诺(Hanoi)塔问题-递归实现 源代码: 运行结果: 程序算法: 程序参数: 输出大小: 149.3...

  • 算法学习

    算法学习 递归 调用自身终止条件 汉诺塔问题 python实现: def hanoi(n, a, b, c):if...

  • 河内塔算法

    河内塔(hanoi)算法 河内塔算法的介绍网上资料很多,我在这里再把需求简单说一下,有三棵柱子(A,B,C),A柱...

  • 汉诺塔问题与递归

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

  • Hanoi塔

    ``` public class Hanoi { public static void moveOne(char ...

  • 分治策略——Hanoi塔问题

    一、单Hanoi塔 上图为 3 阶 Hanoi 塔 假设有三个命名为 A B C 的塔座 ,在塔座A上插有n个直径...

  • 汉诺塔——python

    汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。大梵天创造世界的时...

  • 图解 汉诺塔递归算法

    题目: --- (如果看过N次的就不用看了 直接跳到题解) 汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tow...

  • 递归应用(1) Hanoi塔问题

    汉诺塔分为源塔S,过度塔I,目标塔A,S上有n个盘子,将盘子移动到A,保持大的盘子在小盘子下方:1、如果S上只有1...

网友评论

    本文标题:#编程基础#算法——Hanoi塔问题

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