> 文档中心 > 【C语言】汉诺塔问题

【C语言】汉诺塔问题

C语言汉诺塔问题可以简单抽象为;现有A,B,C三根柱子,其中,A上有64个圆盘(由上到下,大小依次递增),借助B柱子,将A中的圆盘移动到C中。(每次只能移动一次,且顺序由上到下,大小依次递增)

主要思路:函数递归;其中,x表示圆盘出发的柱子,y表示圆盘经过的柱子,z表示圆盘想要到达的柱子

步骤:先将n-1个盘移动经过C移动到B, 再将B中n-1个圆盘通过C移动到A,依次递归,利用if判断条件跳出函数,可忽略中间过程。

hanoi(int n, char x, char y, char z)
#includevoid hanoi(int n, char x, char y, char z);void move(char x, char z);int main(void){char A, B, C;int n;printf("输入盘子的数量");scanf("%d", &n);hanoi(n, 'A', 'B', 'C');return 0;}void move(char x, char z){printf("%c---->%c\n", x, z);}void hanoi(int n, char x, char y, char z){if (n == 1)move(x, z);   //还有一个盘子时,直接把盘子从第一跟柱子移动到第三根柱子else{hanoi(n - 1, x, z, y);move(x, z);hanoi(n - 1, y, x, z);}}

空气商城