问题 L: The Hanoi Tower
题目描述
“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相关推荐
- 3-6-汉诺塔(Hanoi Tower)问题-栈和队列-第3章-《数据结构》课本源码-严蔚敏吴伟民版...
课本源码部分 第3章 栈和队列 - 汉诺塔(Hanoi Tower)问题 --<数据结构>-严蔚敏.吴伟民版 源码使用说明 链接☛☛☛ <数据结构-C语言版> ...
- Hanoi Tower Troubles Again!
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1239 题目描述: Time Limit: 2 Seconds ...
- 奇怪的汉诺塔 Four Column Hanoi Tower
奇怪的汉诺塔 题面 传送门 思路 首先考虑三个柱子的汉诺塔: 假设当前有 n n n个盘子: 先把前n-1个盘子从A柱移到B柱,然后把A柱上剩的那一个盘子移动到C柱最后把B柱上的那n-1个盘子移动到C ...
- 汉诺塔(Hanoi Tower)
问题分析 汉诺塔问题是一个经典的问题.汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说. 大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘. ...
- 汉诺塔(hanoi tower)游戏
问题 递归实现汉诺塔 算法实现 #include <stdio.h> void hanoi( int n, char a, char b, char c) {if( n > 0 ) ...
- zoj 2954 Hanoi Tower(汉诺塔)
转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=4 ...
- Hanoi Tower 汉诺塔的简单分析/C
当然.这是一个经典的递归问题~ 想必来看这篇博文的同学对汉诺塔应该不会陌生了吧, 写这篇博还是有初衷的: 之前学数据结构的时候自己看书.也上网上查了很多资料,资料都比较散.而且描述的不是很清楚, ...
- [山东科技大学OJ]1245 Problem H: The Hanoi Tower
Time Limit: 1 Sec Memory Limit: 16 MB Submit: 8260 Solved: 4681 [Submit][Status]Description " ...
- The Hanoi Tower
Description "Hanoi Tower"问题的背景和搬移规则大家是否都很熟悉了?为了突出重点,我把问题描述放在下面的HINT部分,不了解的同学可以参考. 首先我们Hano ...
最新文章
- mysql AB 的基本搭建
- 20分钟学会mysql_5分钟学会mysql基本操作
- 使用docker-compose搭建AspNetCore开发环境
- FFmpeg在Windows系统下的编译过程
- Java快速入门学习笔记5 | Java语言中的while循环语句
- 3-18pytorch与矩阵分解PCA
- Oracle执行计划 讲解(二) .
- html5页面签字,html5 canvas实现的手机端签字板
- 国际版firefox安装方法
- ADS2020 Crack使用教程
- jsp教师信息管理系统
- 电脑重装win10系统bios不会设置?用这种方法可以轻松重装系统
- ThinkPHP5验证是不是手机号方法
- 深度学习在情感分类中的应用
- Fluent UDF代码编写
- 思途cms php文件说明,思途旅游CMS系统二次开发说明文档(v5.0).pdf
- python中datetime与str的互相转化
- Python try...except...时捕获异常时具体文件和行数
- R语言 计算 最小二乘法 代码 流程
- TiDB 6.0 实战分享丨内存悲观锁原理浅析与实践
热门文章
- JAVA面试要点004_JAVA编程过程中为了性能优化_应该注意到的地方
- linux c++编译问题和虚拟机网络通信
- et200sp模块接线手册_格力变频空调模块常见故障处理。
- linux驱动编写(usb host驱动入门)
- 嵌入式操作系统内核原理和开发(多线程轮转)
- java 线程安全性_i++是线程安全的吗?如何解决线程安全性?
- akka mysql_Spray + Akka高性能异步IO并发
- mobaxterm下载与使用mobaxterm远程登录Linux
- 51单片机入门教程(6)——外部中断
- tomcat 错误页面html,Nginx整合Tomcat后配置友好错误界面