//汉诺塔问题 //1、2、3共三个直杆,初始时有NUMBER个盘子按照从大到小的顺序 //在1上从底向上摆放,要求将这些盘子按照次序摆放到3杆 //比如1->2表示将1上的最上面一个盘子放到2上, //汉诺塔问题是2的n次幂级别的时间复杂度啊 //下面给出的是利用六个函数相互之间直接或者间接递归, //如何利用一个包含有四个参数的函数实现递归??? #include <iostream> #define NUMBER 5 using namespace std; void H1to2(int);//将1上的所有盘子按照从大到小自底向上的顺序放到2上 void H1to3(int);//将1上的所有盘子按照从大到小自底向上的顺序放到3上 void H2to1(int);//将2上的所有盘子按照从大到小自底向上的顺序放到1上 void H2to3(int);//将2上的所有盘子按照从大到小自底向上的顺序放到3上 void H3to1(int);//将3上的所有盘子按照从大到小自底向上的顺序放到1上 void H3to2(int);//将3上的所有盘子按照从大到小自底向上的顺序放到2上 int count = 0;//记录盘子转移的次数 int main() { cout << NUMBER << "个盘子的汉诺塔问题解决方法如下:" << endl; H1to3(NUMBER); cout << "转移盘子的次数为:" << count << endl; system("pause >> cout"); return 0; } //将1上的所有盘子按照从大到小自底向上的顺序放到2上 void H1to2(int n1to2) { if(n1to2 == 1) { cout << " 1 -> 2 " << endl; count++; } else { H1to3(n1to2-1); H1to2(1); H3to2(n1to2-1); } } //将1上的所有盘子按照从大到小自底向上的顺序放到3上 void H1to3(int n1to3) { if(n1to3 == 1) { cout << " 1 -> 3 " << endl; count++; } else { H1to2(n1to3 - 1); H1to3(1); H2to3(n1to3 - 1); } } //将2上的所有盘子按照从大到小自底向上的顺序放到1上 void H2to1(int n2to1) { if(n2to1 == 1) { cout << " 2 -> 1 " << endl; count++; } else { H2to3(n2to1 - 1); H2to1(1); H3to1(n2to1 - 1); } } //将2上的所有盘子按照从大到小自底向上的顺序放到3上 void H2to3(int n2to3) { if(n2to3 == 1) { cout << " 2 -> 3 " << endl; count++; } else { H2to1(n2to3 - 1); H2to3(1); H1to3(n2to3 - 1); } } //将3上的所有盘子按照从大到小自底向上的顺序放到1上 void H3to1(int n3to1) { if(n3to1 == 1) { cout << " 3 -> 1 " << endl; count++; } else { H3to2(n3to1 - 1); H3to1(1); H2to1(n3to1 - 1); } } //将3上的所有盘子按照从大到小自底向上的顺序放到2上 void H3to2(int n3to2) { if(n3to2 == 1) { cout << " 3 -> 2 " << endl; count++; } else { H3to1(n3to2 - 1); H3to2(1); H1to2(n3to2 - 1); } }
这上面的就是渣呀,怎么会有这种奇葩的思维
#include <iostream> using namespace std; /*递归函数 从左到右的参数分别为准备移动的盘子数,最初放置这些盘子的桩 作为临时存放点的桩,最终放置这些盘子的桩*/ void hanoi(int ,char ,char ,char); int count;//统计进行多少次的转移 int main() { int number;//盘子个数 cout << "请输入汉诺塔问题中的盘子个数:"; cin >> number; hanoi(number,'A','B','C'); system("pause >> cout"); return 0; } //将number个盘子从a桩借助b桩转移到c桩 void hanoi(int number,char a,char b,char c) { if(number == 1) cout << a << " -> " << c << endl; else { hanoi(number-1,a,c,b); cout << a << " -> " << c << endl; hanoi(number-1,b,a,c); } }
相关推荐
汉诺塔问题是一个经典的递归问题,在计算机科学和数学领域都有着广泛的应用。它不仅是一个编程练习题,也是理解递归思想和分治策略的一个很好例子。 首先,我们来了解汉诺塔问题的基本概念。汉诺塔(Hanoi Tower)...
js手写实现汉诺塔和移动过程和控制台树形结构
C语言习题 递归方法求解汉诺塔问题 C语言习题 递归方法求解汉诺塔问题
四柱汉诺塔问题是一个经典的递归算法问题,源自古代印度的一个传说,它涉及三个柱子和若干个大小不一的圆盘。在这个问题中,目标是将所有圆盘从一个柱子移动到另一个柱子,但每次只能移动一个盘子,并且任何时候大...
汉诺塔问题是一个经典的递归问题,源自印度的古老传说,它涉及到三个柱子和一堆大小不一的圆盘。目标是将所有圆盘从一个柱子(初始柱)移动到另一个柱子(目标柱),但每次只能移动一个圆盘,并且任何时候大盘子都不...
汉诺塔问题代码,包括栈的基本操作,思路清晰,对于初学者有很好的指导作用。数据结构上机题目的代码,大学二年级的资料
汉诺塔问题是一个经典的递归问题,源自印度的古老传说,它涉及到三个柱子和一组大小不一的圆盘。游戏的目标是将所有圆盘从第一个柱子(A)移动到第三个柱子(C),每次只能移动一个圆盘,并且任何时候大盘子都不能...
题目中的“ACM HDU 汉诺塔 递归练习”指的是在中国杭州电子科技大学(ACM HDU)在线评测系统上的一系列关于汉诺塔问题的练习题。 #### 汉诺塔问题背景 汉诺塔问题源于一个古老的印度传说,据说在世界的中心贝拿勒斯...
【标题】"java 经典习题 【八皇后,汉诺塔等】" 【描述】中的这个主题聚焦在Java编程语言的经典问题上,这些问题通常被用作面试或学习编程思维的练习。这些习题涵盖了算法设计、问题解决策略以及数据结构的运用。...
C语言基础算法习题集 包括青蛙跳台阶 汉诺塔等分享给需要的同学 C Basic Algorithms Problem sets Introduction Here collect a set of Problems which about Algorithms, which are suitable for tyros to Practice...
### Hanoi塔问题的一种非递归算法:深入解析与实现 #### 一、引言 Hanoi塔问题作为计算机科学领域内经典的递归问题之一,因其简洁性和挑战性而广受关注。通常,Hanoi塔问题的解决方案多采用递归算法,尽管其逻辑...
同时,对于初学者来说,汉诺塔问题也是学习递归思想非常好的练习题。 总之,本文通过一个具体的编程实例——Python实现汉诺塔算法,深入浅出地讲解了递归算法在解决实际问题中的应用,并给出了一段完整的示例代码。...
本资源“汉诺塔Java源码-DataStructuresAlgorithms:500+数据结构和算法练习题”提供了一个丰富的实践平台,涵盖了500多个数据结构和算法的实例,旨在帮助开发者深入理解和应用这些基础知识。 首先,让我们关注汉诺...
在本节中,我们将深入探讨"C++大学教程Deitel第五版"中第六章的课后习题,重点是递归程序设计以及著名的汉诺塔(Hanoi)问题。递归是计算机科学中的一个重要概念,它涉及到函数调用自身来解决更小规模的同类问题。而...
或者,题目可能与递归有关,如斐波那契数列、汉诺塔等问题。 最后,题目1076可能测试的是C++高级特性,如模板、虚函数、多态、异常处理等。也可能涉及一些高级算法,如KMP字符串匹配算法、二分查找、滑动窗口最大值...
8. **递归与递推**:阶乘计算、汉诺塔问题、斐波那契数列等。 在解决这些题目时,学习者应深入理解每个知识点背后的原理,并通过实践来提高编程技巧。源码与答案的提供有助于自我检查和学习,可以及时发现错误,...
通常,汉诺塔问题是一个经典的递归算法问题,涉及将多层圆盘从一根柱子移动到另一根柱子,遵循每次只能移动一个圆盘且大圆盘不能放在小圆盘之上的规则。但这个话题并未在题目描述或部分内容中体现,因此不在当前内容...
通过《算法初步练习题》中的习题,你可以系统地练习和掌握这些基础算法,从而提升自己的编程能力和问题解决能力。解题过程中,建议配合理论学习,理解每种算法的原理,并尝试用不同的语言实现,以加深理解。同时,...
在汉诺塔问题中,我们可以使用递归来解决问题,或者使用动态规划来解决问题。 知识点8:算法优化 算法优化是一种重要的技术,它可以提高程序的效率和性能。在解决汉诺塔问题和海盗船长问题时,我们可以使用算法...