汉诺塔问题。这是一个经典的数学问题:古代有一个梵塔,塔内有3个座A,B,C,开始时A座上有64个盘子,盘子大小不等,大的在下小的在上。有一个老和尚想把这64个盘子从A座移动到C座,但每次只允许移动一个盘,且在移动过程中3个座上始终保持大盘在下,小盘在上。在移动过程中可以利用B座,要求编程序打印出移动的步骤。
先看一个简单的,两个盘子:
当盘子增多的时候就比较复杂了,这时可以用递归的方法。
移动n个盘子,可以把上面的n-1个盘子看作一个整体,这样就变成了上述的移动两个盘子的情况。即:
之后的代码实现就比较简单了:
void Hanoi(int n, char A, char B, char C)
{
if (n == 1)
{
cout << A << "->" << C << endl;
}
else
{
Hanoi(n - 1, A, C, B);
cout << A << "->" << C << endl;
Hanoi(n - 1, B, A, C);
}
}
int main()
{
int n;
cin >> n;
Hanoi(n,'A','B','C');
return 0;
}
输入4测试一下: