1.简单来讲,汉诺塔问题是这样的:
给定三根柱子,记为A ,B,C ,其中 A 柱子上有 N 个盘子,从上到下编号为 0 到 N−1 ,且上面的盘子一定比下面的盘子小。问:将 A柱上的盘子经由 B 柱移动到 C 柱最少需要多少次?
移动时应注意:① 一次只能移动一个盘子
②大的盘子不能压在小盘子上
代码:#include <stdio.h>
void move(char p1, char p2)
{
printf("%c->%c ", p1, p2);
}
void Hanoi(int n, char p1, char p2, char p3)
{
if (n == 1)
{
move(p1, p2);
}
else
{
Hanoi(n - 1, p1, p3, p2);
move(p1, p3);
Hanoi(n - 1, p2, p1, p3);
}
}
int main()
{
int n = 0;
scanf("%d", &n);
Hanoi(n, 'A', 'B', 'C');
printf("\n");
return 0;
}
以下是n=3时的运行结果