题目描述

“Hanoi Tower”问题的背景和搬移规则大家是否都很熟悉了?为了突出重点,我把问题描述放在下面的HINT部分,不了解的同学可以参考。

首先我们Hanoi塔上的盘子按从上到下编号,假设Hanoi塔上有n个盘子,那么最小的那个盘子就是1号盘子,然后是2号、3号……最大的盘子是n号。

Hanoi塔的3根针我们也进行编号,最左边的是1号,中间的是2号,最右边的是3号。

如果我们想把n=2个盘子从1号针搬到2号针,那么3号针作为暂存使用。整个搬移过程是这样的:

1号盘子:从1号针搬到3号针
2号盘子:从1号针搬到2号针
1号盘子:从3号针搬到2号针

你的任务是编个程序把上面的搬移过程输出来,程序需要输入盘子的个数n,并且这n个盘子一开始在哪根针,要搬到哪根针都是从输入得到的。

输入

输入为多行,至EOF结束。

每行输入四个整数,第一个整数为盘子数n(1<=n<=10),后面的三个整数是三根针的编号,它们排列的顺序是有不同含义的:第二个整数是n个盘子一开始的位置,第四个整数是盘子最终要放置的位置,第三个整数是搬移过程中用来暂存盘子的。
如:
输入“1 2 3 1”表示只有一个盘子,从第2根针搬到第1跟针上。

输出

每一行输入都对应一个搬移过程,首先输出一个“case i”,表示对应的第i个输入。然后再它后面输出搬移的步骤。如:

输入“1 2 3 1”表示只有一个盘子,从第2根针搬到第1跟针上。那么它的搬移步骤只有一步:把1号盘子从第2跟针搬到第1跟针,即输出:

plate 1 : from 2 to 1

样例输入

1 2 3 1
2 2 3 1
3 1 2 3
4 3 1 2

样例输出

case 1 :plate 1 : from 2 to 1case 2 :plate 1 : from 2 to 3plate 2 : from 2 to 1plate 1 : from 3 to 1case 3 :plate 1 : from 1 to 3plate 2 : from 1 to 2plate 1 : from 3 to 2plate 3 : from 1 to 3plate 1 : from 2 to 1plate 2 : from 2 to 3plate 1 : from 1 to 3case 4 :plate 1 : from 3 to 1plate 2 : from 3 to 2plate 1 : from 1 to 2plate 3 : from 3 to 1plate 1 : from 2 to 3plate 2 : from 2 to 1plate 1 : from 3 to 1plate 4 : from 3 to 2plate 1 : from 1 to 2plate 2 : from 1 to 3plate 1 : from 2 to 3plate 3 : from 1 to 2plate 1 : from 3 to 1plate 2 : from 3 to 2plate 1 : from 1 to 2
//汉诺塔是经典的递归问题,首先要搞清楚什么是递归以及递归结束的条件
//解决此问题的思想就是先把n-1个移到辅助针上 ,再把第n个移到目标针上,最后再把 n-1个移到目标针上,完成递归
#include<stdio.h>
int hanoi(int n,int src,int mid,int des)
{if(n==1){printf("   plate %d : from %d to %d\n",n,src,des);}else{hanoi(n-1,src,des,mid);//把n-1个移到辅助针上 printf("   plate %d : from %d to %d\n",n,src,des);//把第n个移到目标针上 hanoi(n-1,mid,src,des);//再把 n-1个移到目标针上}
int main()
{int a,b,c,d,count=0;while(scanf("%d %d %d %d",&a,&b,&c,&d)!=EOF){count++;printf("case %d :\n",count);hanoi(a,b,c,d);printf("\n");}
}

问题 L: The Hanoi Tower相关推荐

  1. 3-6-汉诺塔(Hanoi Tower)问题-栈和队列-第3章-《数据结构》课本源码-严蔚敏吴伟民版...

    课本源码部分 第3章  栈和队列 - 汉诺塔(Hanoi Tower)问题 --<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接☛☛☛ <数据结构-C语言版> ...

  2. Hanoi Tower Troubles Again!

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1239 题目描述: Time Limit: 2 Seconds   ...

  3. 奇怪的汉诺塔 Four Column Hanoi Tower

    奇怪的汉诺塔 题面 传送门 思路 首先考虑三个柱子的汉诺塔: 假设当前有 n n n个盘子: 先把前n-1个盘子从A柱移到B柱,然后把A柱上剩的那一个盘子移动到C柱最后把B柱上的那n-1个盘子移动到C ...

  4. 汉诺塔(Hanoi Tower)

    问题分析 汉诺塔问题是一个经典的问题.汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说. 大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘. ...

  5. 汉诺塔(hanoi tower)游戏

    问题 递归实现汉诺塔 算法实现 #include <stdio.h> void hanoi( int n, char a, char b, char c) {if( n > 0 ) ...

  6. zoj 2954 Hanoi Tower(汉诺塔)

    转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=4 ...

  7. Hanoi Tower 汉诺塔的简单分析/C

    当然.这是一个经典的递归问题~    想必来看这篇博文的同学对汉诺塔应该不会陌生了吧, 写这篇博还是有初衷的: 之前学数据结构的时候自己看书.也上网上查了很多资料,资料都比较散.而且描述的不是很清楚, ...

  8. [山东科技大学OJ]1245 Problem H: The Hanoi Tower

    Time Limit: 1 Sec  Memory Limit: 16 MB Submit: 8260  Solved: 4681 [Submit][Status]Description " ...

  9. The Hanoi Tower

    Description "Hanoi Tower"问题的背景和搬移规则大家是否都很熟悉了?为了突出重点,我把问题描述放在下面的HINT部分,不了解的同学可以参考. 首先我们Hano ...

最新文章

  1. mysql AB 的基本搭建
  2. 20分钟学会mysql_5分钟学会mysql基本操作
  3. 使用docker-compose搭建AspNetCore开发环境
  4. FFmpeg在Windows系统下的编译过程
  5. Java快速入门学习笔记5 | Java语言中的while循环语句
  6. 3-18pytorch与矩阵分解PCA
  7. Oracle执行计划 讲解(二) .
  8. html5页面签字,html5 canvas实现的手机端签字板
  9. 国际版firefox安装方法
  10. ADS2020 Crack使用教程
  11. jsp教师信息管理系统
  12. 电脑重装win10系统bios不会设置?用这种方法可以轻松重装系统
  13. ThinkPHP5验证是不是手机号方法
  14. 深度学习在情感分类中的应用
  15. Fluent UDF代码编写
  16. 思途cms php文件说明,思途旅游CMS系统二次开发说明文档(v5.0).pdf
  17. python中datetime与str的互相转化
  18. Python try...except...时捕获异常时具体文件和行数
  19. R语言 计算 最小二乘法 代码 流程
  20. TiDB 6.0 实战分享丨内存悲观锁原理浅析与实践

热门文章

  1. JAVA面试要点004_JAVA编程过程中为了性能优化_应该注意到的地方
  2. linux c++编译问题和虚拟机网络通信
  3. et200sp模块接线手册_格力变频空调模块常见故障处理。
  4. linux驱动编写(usb host驱动入门)
  5. 嵌入式操作系统内核原理和开发(多线程轮转)
  6. java 线程安全性_i++是线程安全的吗?如何解决线程安全性?
  7. akka mysql_Spray + Akka高性能异步IO并发
  8. mobaxterm下载与使用mobaxterm远程登录Linux
  9. 51单片机入门教程(6)——外部中断
  10. tomcat 错误页面html,Nginx整合Tomcat后配置友好错误界面