汉诺塔详解

来源:互联网 发布:官职 知 编辑:程序博客网 时间:2024/06/10 13:55

汉诺塔一个有趣的游戏,递归算法的经典题目。题目不在赘述。

思路:

  1. 将n-1个圆盘(除最大的圆盘外)从柱子a移到b。
  2. 将最大的圆盘从柱子a移动到柱子c。
  3. 将柱子b上n-1圆盘从柱子b移动到c。

         1,3 方法一致,都是利用辅助柱子移动圆盘

#include<stdio.h>void han(int n,char a, char b, char c){if(n==1)printf("move %d disk from %c to %c\n",n,a,c);else{han(n-1,a,c,b);printf("move %d disk from %c to %c\n",n,a,c);//关键点,利用栈思想来理解。han(n-1,b,a,c);}}int main(){int N;char A, B,C;   scanf("%d%c%c%c",&N,&A,&B,&C);   han(N,'A','B','C');   return 0;}

测试几组数据就会发现 当N为偶数时顺时针移动 A B C, 当N为奇数时顺时针移动 A C B.



0 0
原创粉丝点击