什么是汉诺塔?
如题: 有n个大小不一盘子由小到大叠在一起, 放在盆A中,还盆B和盆C是空的。
要求: 将n个盘子依次由小到大移动到盆C中,每次只能移动一个,在移动过程中盘子要始终保持由小到大的叠在一起。
例如:最简单的是只有3个盘子。 321 3最大,1最小的步骤为:
1、将21 通过C盆移到B盆。
A - C;
A - B;
C - B;
2、将3移动到C盆。
A - C
3、将21 通过A盆再移动到C盆。
B - A;
B - C;
A - C;
- #include <stdio.h>
- int main() {
- void hanoi(int n,char a,char b,char c);
- int n = 3;
- char a = 'A',b='B',c='C';
- hanoi(n,a,b,c);
- return 0;
- }
- void hanoi(int n, char a, char b, char c) {
- void move(char src, char target);
- if (n == 1) {
- move(a, c);
- } else {
- hanoi(n - 1, a, c, b);
- move(a, c);
- hanoi(n - 1, b, a, c);
- }
- }
- void move(char start, char end) {
- printf("%c > %c \n", start, end);
- }
打印结果:
A > C
A > B
C > B
A > C
B > A
B > C
A > C
转载于:https://blog.51cto.com/hiandroidstudio/1181200