递归实现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做辅助
}
}
相关文章推荐
- Java基于循环递归回溯实现八皇后问题算法示例
- 0-1背包问题经典算法(递归实现)
- 棋盘覆盖问题算法分析与实现(递归)
- 全排列问题算法分析与实现(递归、非递归)
- 算法-Hanoi塔问题+递归
- 用递归法:设计算法求解汉诺塔问题,并编程实现。 (1) Hanoi(汉诺)塔问题分析 这是一个古典的数学问题,是一个用递归方法解题的典型例子。问题是这样的:古代有一个梵塔,塔内有3个座 A,B,C
- 全排列问题算法实现--递归
- 栈与递归的实现(Hanoi塔问题等等)
- 折半查找实现算法二(递归办法)PS:编译后有一个warning,但不影响结果,代码设计上应该还有些问题
- 栈与递归的实现:n阶Hanoi塔的算法分析与源码
- 常用算法的递归实现问题分析(针对《数据结构与程序设计》by Robert.L.Kruse)
- 整数划分问题算法分析与实现(递归)
- [算法]简单的背包问题递归解法,C语言实现
- hanoi塔问题的递归实现
- 全排列算法递归及STL实现,八皇后问题
- [算法]数据结构算法背包问题解法之递归解法,C语言实现
- 求子集问题算法分析与实现(递归、非递归)
- Hanoi塔问题 栈与递归C语言编程实现
- 01背包问题算法实现
- 小程序:备考问题&递归实现每天备考时间的分配(含代码)