您的位置:首页 > 理论基础 > 数据结构算法

C++数据结构与STL--递归--汉诺塔

2013-07-26 08:47 225 查看
Tips:因为要大盘子不能在小盘子上面,所以,init杆上最大的盘子肯定是首先要移动到des杆上的。

于是问题就转化为:


*先把init杆的n-1个盘子全部移动到tem杆,[b]以des杆为临时辅助[/b]

*然后把init的最大盘子移动到des杆,

*接着把tem杆上的所有盘子移动到des杆,[b]以init杆为临时辅助

[/b] 当盘子的个数大于1时,就不停的重复以上三个步骤。

下图给出3个盘子时的递归过程:



实现代码:

//n代表盘子的数目,init代表盘子所在的初始化杆,

//des代表盘子移向的目的杆,tem代表交换时的临时辅助杆

void hanoi(int n,string init,string tem,string des)

{

if(n==1)//停止条件:移动一个盘子

{

cout<<init<<"==>"<<des<<endl;

return;

}

hanoi(n-1,init,des,tem);// 把n-1个盘子从init移动tem,以des为临时辅助

cout<<init<<"==>"<<des<<endl;//移动最大的盘子

hanoi(n-1,tem,init,des);//把n-1个盘子从tem移动到des,以init为辅助

}

int main()

{

hanoi(3,"A","B","C");

return 0;


}

运行结果



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: