/*
2013年3月25日 22:59:36 xulei
汉诺塔: 设有n个盘子, 源柱子: A 中间柱子: B 目标柱子: C
1. 先把A柱子上的前n-1个盘子从A借助C 移动到B; (移完后, A上只剩下最下面的那一个盘子了, 上面的n-1个已经移到了B上)
2. 将A上的第n 个盘子直接移动到C 上. 盘子减少一个
3. 再将B柱子上的n-1个盘子借助于A 移到C.
4. 将B柱子上的第n上盘子直接移动到C上.
重复1-4, 直到盘子为1个时结束.
*/
#include <stdio.h>
long step = 0;
int move(int n, char A, char C)
{
step ++;
printf("step %ld: 将第%d个盘子从%c -> %c\n", step, n, A, C);
return 0;
}
int TowersOfHanoi(int n, char A, char B, char C)
{
if (n > 0)
{
TowersOfHanoi(n-1, A, C, B); // 刚开始, 盘子在A上, A借助C把上面n-1个盘子移动到B
move(n,A,C);
TowersOfHanoi(n-1, B, A, C); // B 借助A 移动到C
}
return 0;
}
int main(int argc, char **argv)
{
int n;
printf("How many disks: ");
scanf("%d", &n);
TowersOfHanoi(n, 'A', 'B', 'C');
return 0;
}
数据结构学习之_汉诺塔递归算法
原文作者:递归算法
原文地址: https://blog.csdn.net/xulei364132789/article/details/8719662
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/xulei364132789/article/details/8719662
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。