您的位置:首页 > 其它

递归实现hanoi塔问题算法

2012-03-01 00:30 239 查看


三个塔座,X、Y、Z

X上有n个直径大小各不相同从大到小依次编号为n的圆盘,

将X塔上的圆盘移到Z塔,要求:

*每次只能移动一个圆盘

*任何时候不能将较大的圆盘压在较小的圆盘之上

算法分析:

如果X塔上只有一个圆盘,则直接移到Z轴上即可

如果X塔上圆盘个数>1,先将X塔上的n-1个盘借助Z塔依次挪到Y塔上,将X塔上的n盘移到Z塔上

以此类推,将Y他上的n-2个盘借助Z塔依次挪到X塔上,将Y塔上的n-1盘移到Z塔上

边界条件 Z塔的盘子数量=n

算法:伪代码

//将x塔上的n个盘子,从X移到Z,用y做辅助

void hannoi(int n ,char x,char y,char z)

{

if(n==1)

{

move(x,1,z);
}

else

{

hannoi(n-1,x,z,y);//将x塔上的n-1个盘子移到y,z做辅助

move(x,n,z) ; //将n从x移到z

hannio(n-1,y,x);//将y上n-1个圆盘移到z,x做辅助

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