问题描述:
有一个梵塔,塔内有三个座A、B、C,A座上有诺干个盘子,盘子大小不等,大的在 下,小的在上(如图)。
有一个梵塔,塔内有三个座A、B、C,A座上有诺干个盘子,盘子大小不等,大的在 下,小的在上(如图)。
把这些个盘子从A座移到C座,中间可以借用B座但每次只能允许移动一个盘子,并且 在移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。
描述简化:把A柱上的n个盘子移动到C柱,其中可以借用B柱。
算法实现:
1.先将A上的n-1个盘子通过C移动到B
2.将A上的最后一个盘子直接移动到C
3.将B上的n-1的盘子通过A移动到C即可实现
C++代码如下:
#include <iostream>
using namespace std;
void Hannuota(int n, char A, char B, char C);
int main()
{
int num;
char ch1 = 'A', ch2 = 'B', ch3 = 'C';
cout << "Enter the number of disk: ";
cin >> num;
Hannuota(num, ch1, ch2, ch3);
return 0;
}
void Hannuota(int n, char A, char B, char C) //一共有n个盘子,通过A柱子借助B柱子移到C柱子
{
if(n == 1)
cout << "将编号为" << n << "的盘子直接从" << A << "移动到" << C << endl;
else
{
Hannuota(n-1, A, C, B);
cout << "将编号为" << n << "的盘子直接从" << A << "移动到" << C << endl;
Hannuota(n-1, B, A, C);
}
}
运行结果: