汉诺塔问题的规则:一块板上有三根针A、B、C。A针上套有n个大小不等的圆盘,按照大的在下、小的在上的顺序排列,要把这n个圆盘从A针移动到C针上,每次只能移动一个圆盘,移动过程可以借助B针。但在任何时候,任何针上的圆盘都必须保持大盘在下,小盘在上。
解决方法:
- 将A针上边(n-1)个圆盘经过C针移动到B针;
- 把A针上剩下的第n个圆盘移动到C针;
- 将B针上(n-1)个圆盘经过A针移动到C针。
代码实现:
#include <iostream>
using namespace std;
void hanoi(int n, char x, char y, char z)
{
if (n == 1)
cout << x << " move to" << z << endl;
else
{
hanoi(n - 1, x, z, y);
cout << x << " move to" << z << endl;
hanoi(n - 1, y, x, z);
}
}
int main()
{
int n;
cin >> n;
hanoi(n, 'A', 'B', 'C');
return 0;
}