美文网首页
C语言——汉诺塔问题

C语言——汉诺塔问题

作者: WhiteStruggle | 来源:发表于2020-11-03 18:05 被阅读0次

汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

问题解析:

假设存在 N 层,首先需要经过一些换位操作将 第 N层 移倒到 C柱,然后是 N-1层,接着是 N-2层,以此类推,完成置换

hanio4.png

经过一系列操作,得到


Hanio.png

移动 N层 到 C柱

hanio2.png

接着是 N-1 层

hanio3.png

· · · · · · · ·

hanio6.png

完成置换:


hanio5.png 分析.png

移动第n层 需要先将 n-1层 移到 B ,然后将 n层 移到 C , 再把 n-1层 移到 C。

  • 移动第n-1层 到 B , 需要先将 n-2层 移到 C ,然后将 n-1层 移到 B , 再把 n-2层 移到 B
  • 移动第n-1层 到 C , 需要先将 n-2层 移到 B ,然后将 n-1层 移到 C , 再把 n-2层 移到 C

将问题简化为三个步骤:

  1. 将 n-1 移到 B
  2. 将 n 移到 C
  3. 将 n-1 移到 C

前n-1层 看成一个整体 为 M , 最大层 为 n ,系统中就包含两层 : nM

递推式 :

F(n) = 2F(n-1) + 1 

证明:
F(1) = 1
F(2) = 2*1 + 1 = 3
F(3) = 2*3 + 1 = 7
F(4) = 2*7 + 1 = 15
·····

即 2^1-1 , 2^2-1 , 2^3-1 , 2^4-1 ······

因此可以推出:
F(n) = 2^n - 1

首先确定总层数,

  • 如果层数是奇数,最上层由A--->C。
  • 如果层数是偶数,最上层A--->B。

利用每递归一层交换B、C柱,由底层倒推到顶层,直到n==1

void hanoi(int n, char x, char y, char z)
{
    if (n == 1)
    {
        move(x, 1, z);
    }
    else
    {
        hanoi(n - 1, x, z, y);
        move(x, n, z);
        hanoi(n - 1, y, x, z);
    }
}
void move(char s, int n, char t)
{
    printf("%d 从 %c 移动到 %c\n", n, s, t);
}

相关文章

  • C语言——汉诺塔问题

    汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下...

  • 动态规划刷题整理(持续更新)

    (持续更新) 奇怪的汉诺塔(4柱汉诺塔) 描述汉诺塔问题,条件如下:1、这里有A、B、C和D四座塔。2、这里有n个...

  • c语言求解循环汉诺塔问题

    1.问题描述 描述Eli最近迷上了汉诺塔。她玩了传统汉诺塔后突发奇想,发明了一种新的汉诺塔玩法。有A、B、C三个柱...

  • 使用OC写算法之汉诺塔问题

    汉诺塔问题简介 汉诺塔问题简单来说是根据一个印度的传说形成的数学问题,有三根杆子A,B,C。A杆上有N个(N>1)...

  • 数据结构算法之递归和栈结构

    递归 程序调用自身的编程技巧称为递归简单案例:n的阶乘 汉诺塔 汉诺塔问题描述:3个柱为a、b、c,圆盘最初在a柱...

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

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

  • 汉诺塔问题与递归

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

  • 汉诺塔算法和背后的数据结构

    汉诺塔是有算法的。 很多问题都有解决办法,汉诺塔也不例外。如果汉诺塔的算法符合 Introduction to a...

  • Python使用递归解决汉诺塔问题

    汉诺塔 (http://baike.baidu.com/view/191666.htm) , 汉诺塔问题也是程序设...

  • 汉诺塔问题

    一个n层的汉诺塔,从A移动到C 由于汉诺塔问题本身的限制,我们最先能思考到的点是第n层最后肯定是要放在C的最下面的...

网友评论

      本文标题:C语言——汉诺塔问题

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