这个程序是目的是:将A柱上的金盘移到B柱上
//从A到B
#include < iostream >
using namespace std;
void move(int inum, char from, char to);
void hanoi(int inum, char a, char b, char c);
void main()
{
int inum;
cout << "Please input the number of Gold Disk :" << endl;
cin >> inum;
cout << "当金盘数为"<< inum
<< "时将A上的金盘移动到B上的步骤为:"
<< endl;
hanoi(inum, 'A', 'B', 'C'); // 借助C,将A上的金盘移动到B上
}
void move(int inum, char from, char to)
{
cout << inum <<" :" << from << "移动到" << to << endl;
}
void hanoi(int inum, char a, char b, char c)
{
if (inum == 1) //每一次递归的终止条件
move(inum, a, b); //将第inum个金盘直接移动到B上
else
{
hanoi(inum-1, a, c, b); //将inum-1个金盘借助于B,从A移动到C上
move(inum, a, b); //将第inum个个金盘直接从A移动到B上
hanoi(inum-1, c, b, a); //将第inum-1个金盘借助于A,从C移到B上,就可以完成了目的
} //即从A上的金盘全部移到B上
}
以下只分析inum = 3的情况:
当inum = 3 时:程序其实是:
hanoi(3, A,B,C)
{
if(为1)
move(1, A,B); //将第inum个金盘直接移动到B上
else
{
@1: hanoi(2,A,C,B); //将inum-1个金盘借助于B,从A移动到C上
@2: move(2,A,B); //将第inum个个金盘直接从A移动到B上
@3: hanoi(2,C,B,A); //将第inum-1个金盘借助于A,从C移到B上,就可以完成了目的
}
}
===>>>
@1: 先执行这个
hanoi(2, A,C,B)
{
if(为1)
move(1, A,C);
else
{
hanoi(1,A,B,C);
move(2,A,C);
hanoi(2,B,C,A);
}
}
hanoi(1, A,B,C)
{
if(为1)
move(1, A,B); // 1:A移到B
else
{
//这部分不用看了,,在此不修改了!
}
}
===================================================================
@2:再执行这个:
move(2,A,C); //2:输出A到C
@3:再执行这个:
hanoi(2,B,C,A); //这里就不一一列出来了,输出结果应该是: 1:B移到C 3:A移动到B
最后就执行move:
2:C移动到B 1:A移到B
大家有什么补充请补充一下,谢谢,互相学习学习!