《数据结构(C语言版)》栈与递归之Hanoi塔
清华大学计算机系列教材 累计发行超400万册
严蔚敏 吴伟民 编著
数据结构(C语言版)
以下是本人对紫皮书第三章3.3节栈与递归的实现中Hanoi塔问题的代码,3.2.5表达式求值、3.2.4迷宫求解、3.2.1数制转换、3.2.2括号匹配的检验、3.2.3行编辑程序这些完整的代码已在栈的应用专栏给出
上运行结果:

代码如下
(貌似专栏把我缩进吃了,懒得加了,另外建议用visual studio编译)
#include <stdio.h>
void move(char a, int n, char b);//把第n个圆盘从塔柱a移动到塔柱b
void hanoi(int n, char x, char y, char z);//中间的y为辅助塔,将塔座x上的n个圆盘搬到塔座z上
int count = 0;//计算搬运次数
int main()
{
char x = 'x';
char y = 'y';
char z = 'z';
hanoi(3, x, y, z);
printf("搬运完成,总共需要搬运%d次", count);
return 0;
}
//塔座x上有按直径由小到大且自上而下编号为1至n的n个圆盘
void hanoi(int n, char x, char y, char z)//中间的y为辅助塔,将塔座x上的n个圆盘搬到塔座z上
{
if (n == 1)
{
move(x, 1, z);//将编号为1的圆盘从x移到z
}
else
{
hanoi(n - 1, x, z, y);
move(x, n, z);
hanoi(n - 1, y, x, z);
}
}
void move(char x, int n, char z)//把第n个圆盘从塔柱x移动到塔柱z
{
printf("第%d次:把%d号圆盘从塔座%c移动到塔座%c\n",++count, n, x, z);
}