汉诺塔

原创 2018年04月16日 20:07:18

汉诺塔

Time Limit: 1000 ms Memory Limit: 65536 KiB

Problem Description

汉诺塔(又称河内塔)问题是印度的一个古老的传说。

开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒A、B和C,A上面套着n个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从A棒搬到C棒上,规定可利用中间的一根B棒作为帮助,但每次只能搬一个,而且大的不能放在小的上面。

僧侣们搬得汗流满面,可惜当n很大时这辈子恐怕就很搬完了。

聪明的你还有计算机帮你完成,你能写一个程序帮助僧侣们完成这辈子的夙愿吗?

Input

输入金片的个数n。这里的n<=10。

Output

输出搬动金片的全过程。格式见样例。

Sample Input

2

Sample Output

Move disk 1 from A to B
Move disk 2 from A to C
Move disk 1 from B to C

Hint

可以用递归算法实现。

Source

#include<stdio.h>
void move(int m, char p, char q, char r)
{
    if(m == 1)
    {
        printf("Move disk %d from %c to %c\n", m, p, r);
    }
    else
    {
        move(m - 1, p, r, q);
        printf("Move disk %d from %c to %c\n", m, p, r);
        move(m - 1, q, p, r);
    }
}
int main()
{
    char p = 'A';
    char q = 'B';
    char r = 'C';
    int m;
    scanf("%d", &m);
    move(m, p, q, r);
    return 0;
}

三维游戏引擎设计与实现-GUI设计与实现

-
  • 1970年01月01日 08:00

汉诺塔系列问题: 汉诺塔II、汉诺塔III、汉诺塔IV、汉诺塔V、汉诺塔VI

汉诺塔 汉诺塔II hdu1207: 先说汉若塔I(经典汉若塔问题),有三塔,A塔从小到大从上至下放有N个盘子,现在要搬到目标C上, 规则小的必需放在大的上面,每次搬一个,求最小步数。这个问题简...
  • u011721440
  • u011721440
  • 2014-07-20 17:59:26
  • 1866

汉诺塔问题带给我的感受

前一阵子学函数的时候,遇到汉诺塔问题,真的看了好久啊,总是无法弄懂,自己一步一步用手去执行的时候,越绕越晕,后来干脆就不看了,休息一阵,过了几天,自己试着不去用手执行,而是单纯去理解书上每一步的作用,...
  • xiyou_android
  • xiyou_android
  • 2015-05-18 13:05:25
  • 1974

汉诺塔动态演示程序C#完整项目

  • 2015年01月25日 14:07
  • 62KB
  • 下载

汉诺塔算法思想

问题描述 一说到递归可能就会想到最经典的汉诺塔问题. 先把汉诺塔问题简短的描述下.假如有start ,tmp , end三个柱子. 1.初始条件.最开始是tmp和end为空,而start上面有按...
  • weiwenhp
  • weiwenhp
  • 2013-01-30 17:53:58
  • 5118

递归和迭代算法 [汉诺塔问题]

递归的基本概念:程序调用自身的编程技巧称为递归,是函数自己调用自己. 一个函数在其定义中直接或间接调用自身的一种方法,它通常把一个大型的复杂的问题转化为一个与原问题相似的规模较小的问题来解决,可以极大...
  • luobo140716
  • luobo140716
  • 2016-05-24 13:40:41
  • 3268

汉诺塔问题的解决思路及算法

关于汉诺塔问题,好多时候当时理解了过段时间可能又会忘,其实这个代码很简单,主要还是分治思想理解不够透彻。 架设3根柱子分别为A、B、C,圆盘数目为n。 1:如果A有一个圆盘,则直接移动至c。 2:如果...
  • m0_37907835
  • m0_37907835
  • 2017-12-31 21:25:27
  • 305

算法学习-类似汉诺塔的问题

题目: 汉诺塔问题比较经典,这里修改一下游戏规则: 现在限制不能从最左侧的塔直接移动到最右 侧,也不能从最右侧直接移动到最左侧,而是必须经过中间。求当塔有 N 层的时候,打印 最优移动过程和最优...
  • Luxia_24
  • Luxia_24
  • 2016-09-02 15:51:01
  • 758

hdoj1207-汉诺塔II(多柱汉诺塔问题)

题目链接思路首先这是个多柱汉诺塔问题,对于n阶汉诺塔,具体步骤如下: 1. 首先我们将x个盘子移到B柱,步数为step(x); 2. 然后将n-x个盘子移到C柱,步数为2^(n-x)-1; ...
  • zq216991
  • zq216991
  • 2016-11-25 13:03:39
  • 707

(优秀汉诺塔算法)对汉诺塔经典递归问题的理解与讲解(部分引用大神代码,附链接。)

博客大神的优秀汉诺塔代码:喜欢特别冷的冬天下着雪   (侵权联系) 本文只是在大神思路的基础上加以理解。 [cpp] view plain copy  print? ...
  • Fighting_Potato
  • Fighting_Potato
  • 2016-10-10 17:55:52
  • 1267
收藏助手
不良信息举报
您举报文章:汉诺塔
举报原因:
原因补充:

(最多只允许输入30个字)