您的位置:首页 > 编程语言 > C语言/C++

汉诺塔问题 Hanoi C++

2012-10-09 13:52 232 查看
Hanoi问题:

设a,b,c是三个塔座,在a上一共堆叠这n个圆盘,这些圆盘由大到小叠在一起,现在要求将塔座a上的圆盘全部移动到b上去,移动时须遵守以下规则:

1.每次只能移动一个圆盘;

2.任何情况,都不允许较大的盘子压在较小的盘子之上;

3.在满足1,2的情况下,可将圆盘移至a,b,c任意一个塔座上.



算法简介:

当塔上圆盘个数n>1时,需要利用c作为辅助塔。可将n-1个圆盘依照移动规则从塔a移动至塔c,然后将剩下的最大的圆盘移动至塔b,再将n-1个圆盘从塔c移动至塔b即可。

依照以上思想,n个圆盘的问题可以分解为两个n-1个圆盘的同样问题来解决。

一下是输出移动步奏的代码..

#include<iostream>

usingnamespacestd;
voidHanoi(intn,chara,charb,charc);
voidMove(intn,chara,charb);

intmain()
{
Hanoi(3,'a','b','c');//传说完成移动64层的汉诺塔,宇宙就终结了,有没有兴趣试试...
return0;
}
voidHanoi(intn,chara,charb,charc)
{
if(n>0)
{
Hanoi(n-1,a,c,b);
Move(n,a,b);
Hanoi(n-1,c,b,a);
}
}
voidMove(intn,chara,charb)
{
cout<<a<<"-->"<<b<<endl;
}

//-----------------------------------procrustes--2012.10.09


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