Hanoi塔问题(C语言程序)
{F3[n] 为Hanoi塔中3根柱子,n个盘子的最少移动次数
现在要求把1柱上n个圆盘按下述规则移到m柱上: (1) 一次只能移一个圆盘; (2) 圆盘只能在m个柱上存放; (3) 在移动过程中,不允许大盘压小盘。
求将这n个盘子从1柱移动到m柱上所需要移动盘子的最少次数 。
问题Ⅰ:三柱问题
设f(n)为n 个盘子从1柱移到3柱所需移动的最少盘次。 当n=1时,f(1)=1。 当n=2时,f(2)=3。
r 1
(n 1)! (n r ) (n 1)!r n! r Cn C n1 C n1 r!(n r )! r!(n r )!
2、平面分割问题
问题Ⅰ
问题的提出:设有n条封闭曲线画在平面上,而任何两条封闭曲线恰好相交于两点,且 任何三条封闭曲线不相交于同一点,求这些封闭曲线把平面分割成的区域个数。
5 、其他: 1)‘集合取数问题 设f(n,k)是从集合{1,2,。。。,n}中能够选择的没有两个连续 整数的k个元素子集的数目,求递归式f(n,k)。
【问题分析】: N有两种情况: ① 当n在子集时,则n-1一定不在子集中,即在{1,2,。。。,n-2}中选 k-1个元素,数目为f(n-2,k-1)。 ② 当n不在子集中时,则在{1,2,。。。,n-1}中选k个元素,数目为 f(n-1,k)。 所以:f(n,k)= f(n-2,k-1) +f(n-1,k) 边界条件:F(n,1)=n, f(n,k)=0 ( n<=k)
汉诺塔问题C语言代码
#includevoid hanoi( int n , char A , char B , char C ){/* 如果是一个盘子直接将A柱子上的盘子从A移动到C否则先将A柱子上的n-1个盘子借助C移到B直接将A柱子上的盘子从A移到C最后将B柱子上的n-1个盘子借助A移到C */if ( 1 == n){printf("将编号为%d的盘子直接从%c柱子移到%c柱子\n" , n , A , C ) ;}else {hanoi( n-1 , A ,C ,B );printf("将编号为%d的盘子直接从%c柱子移到%c柱子\n" , n , A, C) ;hanoi( n -1 , B , A , C ) ; //继续进行汉诺塔函数}}int main (){char ch1 = 'A' ;char ch2 = 'B' ;char ch3 = 'C' ;int n ;printf("please input the number of plates wanting to move :\n") ;scanf("%d" ,&n) ;hanoi( n , 'A' , 'B' , 'C') ;return 0 ;}
【C语言程序设计】汉诺塔问题,用C语言实现汉诺塔!
【C语⾔程序设计】汉诺塔问题,⽤C语⾔实现汉诺塔!
汉诺塔问题是指:⼀块板上有三根针 A、B、C。A 针上套有 64 个⼤⼩不等的圆盘,按照⼤的在下、⼩的在上的顺序排列,要把这 64 个圆盘从 A 针移动到 C 针上,每次只能移动⼀个圆盘,移动过程可以借助 B 针。
但在任何时候,任何针上的圆盘都必须保持⼤盘在下,⼩盘在上。从键盘输⼊需移动的圆盘个数,给出移动的过程。
算法思想
对于汉诺塔问题,当只移动⼀个圆盘时,直接将圆盘从 A 针移动到 C 针。
若移动的圆盘为 n(n>1),则分成⼏步⾛:把 (n-1) 个圆盘从 A 针移动到 B 针(借助 C 针);A 针上的最后⼀个圆盘移动到 C 针;B 针上的 (n-1) 个圆盘移动到 C 针(借助 A 针)。
每做⼀遍,移动的圆盘少⼀个,逐次递减,最后当 n 为 1 时,完成整个移动过程。
因此,解决汉诺塔问题可设计⼀个递归函数,利⽤递归实现圆盘的整个移动过程,问题的解决过程是对实际操作的模拟。
程序代码
#include <stdio.h>
int main()
{
int hanoi(int,char,char,char);
int n,counter;
printf("Input the number of diskes:");
scanf("%d",&n);
printf("\n");
counter=hanoi(n,'A','B','C');
return0;
}
int hanoi(int n,char x,char y,char z)
{
int move(char,int,char);
C语言程序设计课程设计报告---汉诺塔问题
XXXX大学
计算机科学与技术学院
课程设计报告
2012 — 2013学年第一学期
课程名称C/C++高级语言程序设计课程设计设计题目小游戏和图形处理
汉诺塔问题
学生姓名XXX
学号XXXXXXX
专业班级XXXXXXXXXXX
指导教师XX
2012 年X 月XX 日
目录
一、课程设计问题描述 (1)
1、课程设计题目 (1)
2、设计任务要求 (1)
二、总体设计 (1)
1、设计思路 (1)
2、汉诺塔求解流程图 (2)
三、详细设计 (2)
1、汉诺塔问题描述 (2)
2、算法分析 (3)
3、实现递归的条件 (4)
4、用C语言实现 (4)
四、程序运行结果测试与分析 (4)
1、打开Microsoft Visual C++ 6.0操作平台输入以下的源代码 (4)
2、编译源代码 (5)
3、组建 (5)
4、执行 (5)
5、运行结果 (6)
6、按任意键结束程序 (7)
五、结论与心得 (7)
六、参考文献 (8)
七、附录:程序源代码 (8)
一、课程设计问题描述
1、课程设计题目
汉诺塔问题
2、设计任务要求
输入盘子数(2个以上有效),移动速度,开始演示汉诺塔移动的步骤,要求:盘子A,B,C柱需要自己绘制,初始时盘子在A柱上通过B柱最终移动到C 柱上,显示出盘子在几个柱之间的移动过程。
二、总体设计
1、设计思路
对于一个类似的这样的问题,任何一个人都不可能直接写出移动盘子的每一个具体步骤。可以利用这样的统筹管理的办法求解:我们假设把该任务交给一个僧人,为了方便叙述,将他编号为64。僧人自然会这样想:假如有另外一个僧人能有办法将63个盘子从一个座移到另一个座,那么问题就解决了,此时僧人
(仅供参考)汉诺塔问题实验报告
7、结论
通过对上述递归在 Hanoi 塔问题上的应用分析,我们可以得出如下 结论:
1、递归调用过程中,在程序执行之前无法知道控制这种调用栈的 规模,因为这一规模取决于递归调用的次序。在这种情况下,程序 的地址空间可能动态变化;
①将所有的实参、返回地址等信息传递给被调用函数保存。
②为被调用函数的局部变量分配存储区;
③将控制转移到被调用函数的入口。
从被调用函数返回调用函数前,系统也应完成 3 件事:
①保存被调用函数的结果;
②释放被调用函数的数据区;
③依照被调用函数保存的返回地址将控制转移到调用函数。
当有多个函数构成嵌套调用时,按照“后调用先返回”的原则 (LIFO),上述函数之间的信息传递和控制转移必须通过“栈”来 实现,即系统将整个程序运行时所需的数据空间安排在一个栈中, 每当调用一个函数时,就为其在栈顶分配一个存储区,每当从一个 函数退出时,就释放其存储区,因此当前运行函数的数据区必在栈
对于汉诺塔问题的求解,可以通过以下三个步骤实现: (1)将塔 A 上的 n-1 个碟子借助塔 C 先移到塔 B 上。 (2)把塔 A 上剩下的一个碟子移到塔 C 上。 (3)将 n-1 个碟子从塔 B 借助于塔 A 移到塔 C 上。 4.实验步骤:
四年级汉诺塔研究课题报告
一、概述
数据结构是计算机学科非常重要的一门专业基础理论课程,要想编写针对非数值计算问题的高质量程序,就必须要熟练的掌握这门课程设计的知识。另外,他与计算机其他课程都有密切联系,具有独特的承上启下的重要位置。拥有《数据结构》这门课程的知识准备,对于学习计算机专业的其他课程,如操作系统、数据库管理系统、软件工程的都是有益的。
二、实验目的
通过本实验,掌握复杂性问题的分析方法,了解汉诺塔游戏的时间复杂性和空间复杂性。
三、问题分析
任务:有三个柱子A,B,C.A柱子上叠放有n个盘子,每个盘子都比它下面的盘子要小一点,可以从上到下用1,2?,n编号。要求借助柱子B,把柱子A上的所有的盘子移动到柱子C移动条件为:1、一次只能移一个盘子;
2、移动过程中大盘子不能放在小盘子上,只能小盘子放在大盘子上。
分析:首先容易证明,当盘子的个数为n时,移动的次数应等于2n-1。
首先把三根柱子按顺序排成品字型,把所有的圆盘按从大到小的顺序放在柱子A上。根据圆盘的数量确定柱子的排放顺序:若n为偶数,按顺时针方向依次摆放A BC;若n为奇数,按顺时针方向依次摆放ACB。
(1)按顺时针方向把圆盘1从现在的柱子移动到下一根柱子,即当n为偶数时,若圆盘1在柱子A,则把它移动到B;若圆盘1在柱子B,则把它移动到C;若圆盘1在柱子C,则把它移动到A。
(2)接着,把另外两根柱子上可以移动的圆盘移动到新的柱子上。
即把非空柱子上的圆盘移动到空柱子上,当两根柱子都非空时,移动较小的圆盘这一步没有明确规定移动哪个圆盘,你可能以为会有多种可能性,其实不然,可实施的行动是唯一的。
数据结构(第一、二、三组答案)
考试科目:数据结构
第一组:
一、编程题(每小题30分,共60分)
(一)
用标准C语言实现Hanoi塔问题
#include
#include
void move(int n,char x,char y,char z) {
if (n==1) {
printf("%c--->%c\n",x,z);
}else {
move(n-1,x,z,y);
printf("%c--->%c\n",x,z);
move(n-1,y,x,z);
}
}
int main()
{
int n;
scanf("%d",&n);
move(n,'X','Y','Z');
return 0;
}
(二)
1.设单链表中有仅三类字符的数据元素(大写字母、数字和其它字符),要求利用原单链表中结点空间设计出三个单链表的算法,使每个单链表只包含同类字符。
2.设计在链式存储结构上交换二叉树中所有结点左右子树的算法。
二、解答题(20分)
(一)
已知一棵二叉树的先序序列是ABCDEFGHIJK,中序序列是CDBGFEAHJIK,请构造出该二叉树。
三、画图题(20分)
(一)
设有序顺序表中的元素依次为017, 094, 154, 170, 275,503, 509, 512, 553, 612, 677, 765, 897, 908。试画出对其进行折半搜索时的判定树, 并计算搜索成功的平均搜索长度和
搜索不成功的平均搜索长度。
第二组:
一、编程题(每小题30分,共60分)
(一)
已知某哈希表的装载因子小于1,哈希函数H(key)为关键字(标识符)的第一个字母在字母表中的序号,处理冲突的方法为线性探测开放定址法。试编写一个按第一个字母的顺序输出哈希表中所有关键字的算法。
c语言汉诺塔问题递归算法
c语言汉诺塔问题递归算法
汉诺塔问题是经典的递归问题,要求将n个大小不同的盘子从起始柱移动到目标柱,并遵循以下规则:
1.大盘子不能在小盘子上方移动。
2.每次只能移动一个盘子。
在C语言中,我们可以使用递归算法来解决汉诺塔问题。以下是一个简单的示例代码:
```c
#include<stdio.h>
voidhanoi(intn,charfrom,charto,charaux){
if(n==1){
//只有一个盘子时,直接移动到目标柱
printf("Movedisk1from%cto%c\n",from,to);
}else{
//递归地将n-1个盘子从起始柱移动到辅助柱,再将最后一个盘子从起始柱移动到目标柱
hanoi(n-1,from,aux,to);
printf("Movedisk%dfrom%cto%c\n",n,from,to);
hanoi(n-1,aux,to,from);
}
}
intmain(){
intn;
printf("Enterthenumberofdisks:");
scanf("%d",&n);
hanoi(n,'A','C','B');//从起始柱A开始,目标柱C,辅助柱B
return0;
}
```
在上述代码中,我们定义了一个名为hanoi的函数,用于实现汉诺塔问题的递归解法。该函数接受四个参数:n表示盘子的数量,from表示起始柱,to表示目标柱,aux表示辅助柱。当只有一个盘子时,直接移动到目标柱;否则,我们通过递归调用将n-1个盘子从起始柱移动到辅助柱,再将最后一个盘子从起始柱移动到目标柱。在主函数中,我们从用户输入获取盘子的数量,并调用hanoi函数开始解决问题。
对汉诺塔(Hanoi)问题的算法探索与研究
1 问题分析与算法设 计
汉诺塔 ( Ha n o i )问题是一个著名的问题。6 4个 圆盘 按从
小 到大 的顺序依次套在柱 x 上,如图 1 所示。规定每次只能从
一
根柱子上搬动一个 圆盘到另一根柱子上,且要求在搬动过程
中不许大盘放 在小盘 上,且只有 x 、Y 、z 三根柱子可供使用。
Abs t r a c t : The a l g o r i t h m o f t h e T o we r o f Ha n o i pr o b l e m i s c o n c r e t e l y a n a l y z e d , a n d f o u r d i f f e r e n t k i nd s o f c l a s s i c a l a l g o r i t h m wa s pr e s e n t e d, S O a s t o i ns p i r e t h e l e a r ne r s ’e x pl o r i n g e n t h us i a s m t o t h e n e w a l g o r i t hm o fc l a s s i c To we r o f Ha n o i . Ke ywor ds : T o we r o f Ha n o i ; pr o bl e m a na l ys i s ; a l g o r i t h m de s i g n ; i mp l e me n t a t i o n pr o gr a me
hanoi塔问题
源轴
辅助轴
wk.baidu.com
目的轴
n (1 ~ n)
n-1(1~n-1)
A A A B
B C
C B C
1(n)
n-1(1~n-1)
A
C
C语言程序设计
Hanio塔问题
hanoi( n, one , two , three )
1: … 2: 输入n=3, if ( n==1 ) 将one轴上的圆盘移到three轴; 1: 输出结果为 : else 3: { hanio( n-1, one, three, two ) ; 1: 将第 n 号圆盘由 one 轴移动到 three 轴 ; 2: hanio( n-1, two, one, three ) ; 1: } …
Hanio塔问题
归纳上述过程, 得到如下步骤: 归纳上述过程 得到如下步骤 ① 从 A 轴移动 1~n-1 号圆盘到B 轴, C 轴作辅助存放之用 ; ② 从 A 轴移动 n 号圆盘到 C 轴 ; ③ 从 B 轴移动 1~n-1 号圆盘到 C 轴, A 轴作辅助存放之用 ;
移动 圆盘数 总任务 子任务① 子任务① 子任务② 子任务② 子任务③ 子任务③
C语言程序设计
Hanio塔问题
Hanio塔问题:
1. 游戏起源: 世界末日游戏 2. 游戏规则: ① 每次只能移动一只圆盘 ; ② 任何时候大圆盘不能压在小圆盘之上 ; ③ 任何时候都不允许将圆盘放在三根立轴之外的任 何地方 ; 3.分析: A C B
hanoi塔递归算法
hanoi塔递归算法
Hanoi塔递归算法
Hanoi塔是一个经典的数学问题,它的解法可以用递归算法来实现。在这篇文章中,我们将介绍Hanoi塔问题的背景和递归算法的实现。
Hanoi塔问题的背景
Hanoi塔问题是一个源于印度的传统数学问题,它的名字来源于印度的一个城市哈诺伊。这个问题的描述如下:
有三个柱子,分别为A、B、C,A柱子上有n个盘子,盘子大小不一,大的在下面,小的在上面。现在要将A柱子上的所有盘子移动到C柱子上,移动过程中可以借助B柱子,但是要满足以下规则:
1.每次只能移动一个盘子;
2.大盘子不能放在小盘子上面。
这个问题看起来很简单,但是实际上它是一个非常复杂的问题。当盘子数量较少时,我们可以手动模拟移动过程,但是当盘子数量增加时,手动模拟就变得非常困难。因此,我们需要一种更加高效的算法来解决这个问题。
递归算法的实现
递归算法是一种非常常见的算法,它的基本思想是将一个大问题分解成若干个小问题,然后逐个解决这些小问题,最终得到大问题的解。在Hanoi塔问题中,我们可以使用递归算法来解决这个问题。
我们需要定义一个函数来实现移动盘子的操作。这个函数需要接受三个参数:起始柱子、目标柱子和盘子数量。函数的实现如下:
```
void move(int start, int end, int num)
{
if (num == 1)
{
cout << "Move disk " << num << " from " << start << " to " << end << endl;
Hanoi(汉诺)塔问题
将1个盘子从A移到B
A
B
C
11:59
26
将2个盘子从A移到B的过程
将1个盘子从A移到B
A
B
C
11:59
27
将2个盘子从A移到B的过程
将1个盘子从C移到B
A
B
C
11:59
28
将2个盘子从A移到B的过程
将1个盘子从C移到B
A
B
C
11:59
29
将2个盘子从B移到C的过程
A
B
C
11:59
30
将2个盘子从B移到C的过程
11:59
37
#include <stdio.h> int main() { void hanoi(int n,char one, char two,char three); int m; printf(“the number of diskes:"); scanf("%d",&m); printf("move %d diskes:\n",m); hanoi(m,'A','B','C'); }
11:59
34
• 可以将第(1)步和第(3)步表示为:
– 将“one”座上n-1个盘移到“two”座(借助“three” 座)。 – 在第(1)步和第(3)步中,one 、two、three 和A、B、C的对应关系不同。 – 对第(1)步,对应关系是one对应A,two对 应B,three对应C。 – 对第(3)步,对应关系是one对应B,two对 应C,three对应A。
C语言递归调用实例——汉诺塔问题动画实现(附完整代码)
个圆盘的移动操作。 不过这好像并不影响我们对其进行学习和探索,我们只需要将圆盘的
个数 n 的值设得稍微小一些(以便我们能够在有生之年看到程序的最终运 行结果),就可以了。
好了,闲话少说,先上图(虽然是实现了动画效果,但是文档里面不 能放动图,所以这里仅以三张不同时间节点下的截图来表示)。
图 1-1 移动第一个圆盘
1
4.4 GUI.h................................................................................................................................................ 36 4.4 GUI.cpp ........................................................................................................................................... 37 4.5 LinkedStack.h................................................................................................................................. 41 4.6 LinkedStack.cpp............................................................................................................................ 43
07141326汉诺塔-课程设计
07141326汉诺塔-课程设计
汉诺塔课程设计
报告
⽬录
⼀、需求分析 (3)
⼆、概要设计 (4)
三、详细设计 (6)
四、测试与分析 (7)
五、总结 (7)
六、附录:源程序清单 (8)
⼀、需求分析
1.1问题描述
汉诺塔(⼜称河内塔)问题是印度的⼀个古⽼的传说。开天辟地的神勃拉玛在⼀个庙⾥留下了三根⾦刚⽯的棒,第⼀根上⾯套着64个圆的⾦⽚,最⼤的⼀个在底下,其余⼀个⽐⼀个⼩,依次叠上去,庙⾥的众僧不倦地把它们⼀个个地从这根棒搬到另⼀根棒上,规定可利⽤中间的⼀根棒作为帮助,但每次只能搬⼀个,⽽且⼤的不能放在⼩的上⾯。
这是⼀个著名的问题,⼏乎所有的教材上都有这个问题。由于条件是⼀次只能移动⼀个盘,且不允许⼤盘放在⼩盘上⾯,所以64个盘的移动次数是:
18,446,744,073,709,551,615
这是⼀个天⽂数字,若每⼀微秒可能计算(并不输出)⼀次移动,那么也需要⼏乎⼀百万年。我们仅能找出问题的解决⽅法并解决较⼩N值时的汉诺塔,但很难⽤计算机解决64层的汉诺塔。
后来,这个传说就演变为汉诺塔游戏:
1.有三根杆⼦A,B,C。A杆上有若⼲圆盘
2.每次移动⼀块圆盘,⼩的只能叠在⼤的上⾯
3.把所有圆盘从A杆全部移到C杆上
经过研究发现,汉诺塔的破解很简单,就是按照移动规则向⼀个⽅向移动圆盘:如3阶汉诺塔的移动:
A→C,A→B,C→B,A→C,B→A,B→C,A→C
此外,汉诺塔问题也是程序设计中的经典递归问题。
将n个盘⼦从a座移动到c座可以分解为以下3个步骤:
(1)将a上n-1个盘借助c座先移到b座上。
(2)把a座剩下的⼀个盘移到c座上。
递归基础练习题
递归基础练习题
递归基础练习题
1. 求1+2+3+……+n的值
2. 求1*2*3*……*n的值
3. 数的全排列问题。将n个数字1,2,…n的所有排列按字典顺序枚举出来
2 3 1
2 1 3
3 1 2
3 2 1
4. 数的组合问题。从1,2,…,n中取出m个数,将所有组合按照字典顺序列出。
如n=3,m=2时,输出:
1 2
1 3
2 3
9. 求两个数的最大公约数。
10. 求两个数的最小公倍数。
5. 小猴子第一天摘下若干桃子,当即吃掉一半,又多吃一个.第二天早上又将剩下的桃子吃一半,又多吃一个.以后每天早上吃前一天剩下的一半另一个.到第10天早上猴子想再吃时发现,只剩下一个桃子了.问第一天猴子共摘多少个桃子?
8. 著名的菲波拉契(Fibonacci)数列,其第一项为1,第二项为1,从第三项开始,其每一项都是前两项的和。编程求出该数列前N项数据。15. 梯有N阶,上楼可以一步上一阶,也可以一次上二阶。编一个程序,计算共有多少种不同的走法。
6. 有雌雄一对兔子,假定过两个月便可繁殖雌雄各一的一对小兔子。问过n个月后共有多少对兔子?
7. 一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只。这样他经过了七个村子后还剩两只鸭子,问他出发时共赶多少只鸭子?经过每个村子卖出多少只鸭子?
11. 输入一个数,求这个数的各位数字之和。
12. 角谷定理。输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。
如:输入22,
hanoi塔递归算法c语言
hanoi塔递归算法c语言
Hanoi塔是一种经典的数字益智游戏,它来源于法国数学家Lucas的BrainVita游戏,被称为“汉诺威塔问题”或“汉诺塔问题”。该游戏由三个柱子和几个圆盘组成,最初时,圆盘按半径从大到小依次放在一个柱子上(逆序排列),游戏的目标则是将这些圆盘移动到另一个柱子上,最终使得其按半径从小到大依次排列。在移动整个圆盘的过程中,必须遵循以下规定:
1. 每次只能移动一个圆盘;
2. 圆盘可以放置在任何柱子上;
3. 不能将一个大的圆盘放在较小的圆盘之上。
为了解决这一难题,Hanoi塔问题引入了递归算法,这也是大多数编程语言中最常使用的算法之一。在C语言中,Hanoi塔问题可以用以下代码实现:
```c
#include<stdio.h>
void move(int n, char x, char y, char z)
{
if(n == 1)
{
printf("%c-->%c\n", x, z);
}
else
{
move(n-1, x, z, y);
printf("%c-->%c\n", x, z);
move(n-1, y, x, z);
}
}
int main()
{
int n;
printf("请输入盘子数:");
scanf("%d", &n);
printf("移动的步骤如下:\n");
move(n, 'A', 'B', 'C');
return 0;
}
```
在这个程序中,我们首先定义了一个函数`move()`,该函数接受四个参数:圆盘的数量`n`和字母标识符`x`、`y`、`z`,它们分别代表三个柱子。在函数中,我们使用了条件判断语句,如果只有一个圆盘,我们直接将其从柱子`x`移动至柱子`z`上。否则,我们需要进行3个步骤:
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
// algo3-10.cpp Hanoi塔问题,调用算法3.5的程序
#include
int c=0; // 全局变量,搬动次数
void move(char x,int n,char z)
{ // 第n个圆盘从塔座x搬到塔座z
printf("第%i步: 将%i号盘从%c移到%c\n",++c,n,x,z);
}
void hanoi(int n,char x,char y,char z) // 算法3.5
{ // 将塔座x上按直径由小到大且自上而下编号为1至n的n个圆盘
// 按规则搬到塔座z上。y可用作辅助塔座
if(n==1)
move(x,1,z); // 将编号为1的圆盘从x移到z
else
{
hanoi(n-1,x,z,y); // 将x上编号为1至n-1的圆盘移到y,z作辅助塔
move(x,n,z); // 将编号为n的圆盘从x移到z
hanoi(n-1,y,x,z); // 将y上编号为1至n-1的圆盘移到z,x作辅助塔
}
}
int main()
{
int n;
printf("3个塔座为a、b、c,圆盘最初在a座,借助b座移到c座。请输入圆盘数:"); scanf("%d",&n);
hanoi(n,'a','b','c');
}