文章目录
- 概要
- 整体架构流程
- 代码实现
- 小结
概要
汉诺塔问题,是心理学实验研究常用的任务之一。该问题的主要材料包括三根高度相同的柱子和一些大小及颜色不同的圆盘,三根柱子分别为起始柱A、辅助柱B及目标柱C。
整体架构流程
对于这样一个问题,任何人都不可能直接写出移动盘子的每一步,但我们可以利用下面的方法来解决。设移动盘子数为n,为了将这n个盘子从A杆移动到C杆,可以做以下三步:
(1)以C盘为中介,从A杆将1至n-1号盘移至B杆;
(2)将A杆中剩下的第n号盘移至C杆;
(3)以A杆为中介;从B杆将1至n-1号盘移至C杆。
代码实现
#include <stdio.h>void hanoi(int n, char A, char B, char C) {if (n == 1) {printf("Move disk 1 from %c to %c", A, C);} else {hanoi(n - 1, A, C, B);printf("Move disk %d from %c to %c", n, A, C);hanoi(n - 1, B, A, C);}
}int main() {int n;printf("Enter the number of disks: ");scanf("%d", &n);hanoi(n, 'A', 'B', 'C');return 0;
}
小结
这段代码首先定义了一个名为hanoi
的函数,该函数接受四个参数:盘子的数量n
,以及三个字符A
、B
和C
,分别代表三根柱子。在函数中,如果只有一个盘子,直接将其从A
柱移动到C
柱;否则,先将n-1
个盘子从A
柱借助C
柱移动到B
柱,然后将最大的盘子从A
柱移动到C
柱,最后将n-1
个盘子从B
柱借助A
柱移动到C
柱。
在main
函数中,首先输入盘子的数量n
,然后调用hanoi
函数求解汉诺塔问题。