您的位置:首页 > 编程语言 > C语言/C++

C语言中的Hanoi(汉诺塔)问题

2013-04-19 10:32 357 查看
什么是汉诺塔?

如题: 有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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息