当前位置: 首页 > 编程笔记 >

河内塔问题

慕胡媚
2023-03-14
本文向大家介绍河内塔问题,包括了河内塔问题的使用技巧和注意事项,需要的朋友参考一下

河内塔是一个难题的问题。我们有三个看台和n个光盘。最初,将光盘放置在第一支架中。我们必须将光盘放入第三个或目标支架,第二个或辅助支架可以用作帮助支架。

  • 但是要遵循一些规则。

  •  每个动作我们只能传送一张光盘。

  • 只能从架子上取出最上面的光盘。

  • 较大的光盘不会放在较小的光盘的顶部。

此问题可以通过递归轻松解决。首先,使用递归,将前(n-1)个光盘从源放置到辅助支架,然后将最后一个光盘从源放置到目标,然后再次将(n-1)光盘从辅助支架放置到目的支架。

输入输出

Input:
Number of discs: 3
Output:
1. Move disk 1 from A to C
2. Move disk 2 from A to B
3. Move disk 1 from C to B
4. Move disk 3 from A to C
5. Move disk 1 from B to A
6. Move disk 2 from B to C
7. Move disk 1 from A to C

算法

toh(n, s, a, d)

输入:光盘数量,来源,辅助,目的地。

输出:将光盘从源移动到目标的步骤,并保持正确的规则。

Begin
   if n = 1, then
      display move disc from s to d
   toh(n-1, s, d, a)

   display move disc from s to d
   toh(n-1, a, s, d)
End

示例

#include<iostream>
using namespace std;

void TOH(int n, char s, char a, char d) {
   static int count = 0;          //store number of counts
   if(n == 1) {
      count++;
      cout << count<< ". Move disk " << n << " from "<<s <<" to "<<d<<endl;
      return;      //base case, when only one disk
   }

   TOH(n-1, s, d, a);               //recursive call the function
   count++;
   cout << count<< ". Move disk " << n << " from "<<s <<" to"<<d<<endl;
   TOH(n-1, a, s, d);
}

int main() {
   int n;
   cout << "Enter the number of disks: ";
   cin >> n;
   TOH(n, 'A','B','C');
}

输出结果

Enter the number of disks: 3
1. Move disk 1 from A to C
2. Move disk 2 from A to B
3. Move disk 1 from C to B
4. Move disk 3 from A to C
5. Move disk 1 from B to A
6. Move disk 2 from B to C
7. Move disk 1 from A to C
 类似资料:
  • 问题内容: 这是我使用递归解决河内塔的Java代码: 我放置打印方法的地方重要吗?另外,我可以这样做吗: 问题答案: 以这种方式解决问题,无非是定义如何完成工作的策略。和你的代码: 基本上将您的策略​​定义为喜欢以下情况, 将 _ n-1个 磁盘从 _ “从” (源塔)移动到 _ “其他”_ (中间塔)。 然后将第 _ n 个磁盘从 _ “从” (源塔)移动到 _ “到”_ (目标塔)。 最后将

  • 河内塔,是一个数学难题,由三个塔(钉)和多个环组成,如图所示 - 这些环具有不同的尺寸并以升序堆叠,即较小的环位于较大的环上。 这个拼图还有其他变化,其中磁盘数量增加,但塔数仍然相同。 规则 (Rules) 任务是将所有磁盘移动到另一个塔而不违反排列顺序。 河内塔要遵循的一些规则是 - 在任何给定时间,只能在塔之间移动一个磁盘。 只能删除“顶部”磁盘。 没有大磁盘可以放在小磁盘上。 以下是用三个磁

  • 我在维基百科上看到这个求解河内塔的递归算法。谁能给我解释一下我是怎么得到这个算法的递推方程的? null 将N-1个光盘从A移动到B,这将使光盘n单独位于peg A上 将磁盘n从A移动到C 将N-1个光盘从B移动到C,使它们位于光盘N上 上面是一个递归算法,为了执行步骤1和3,对n-1再次应用相同的算法。整个过程是一个有限的步骤,因为在某一点上,算法将需要n=1。这一步,将单个光盘从pega移动到

  • 主要内容:分治算法解决汉诺塔问题,汉诺塔问题的代码实现汉诺塔问题源自印度一个古老的传说,印度教的“创造之神”梵天创造世界时做了 3 根金刚石柱,其中的一根柱子上按照从小到大的顺序摞着 64 个黄金圆盘。梵天命令一个叫婆罗门的门徒将所有的圆盘移动到另一个柱子上,移动过程中必须遵守以下规则: 每次只能移动柱子最顶端的一个圆盘; 每个柱子上,小圆盘永远要位于大圆盘之上; 图 1 给您展示了包含 3 个圆盘的汉诺塔问题:   图 1 汉诺塔问题 一根柱子上摞

  • 河图是一个低代码平台,通过可视化界面快速生成各种后台页面,极大减少开发成本。 特性 操作简单、功能强大的可视化编辑器 开箱即用、高质量后台管理系统模版 开发流程全部线上化,节省沟通、调试、运维成本 使用 React、TypeScript、nodejs、express 开发 兼容环境 现代浏览器、IE11 以上

  • 雄辩http://laravel.com/docs/4.2/eloquent指南包括以下内容: 急负荷约束 有时,您可能希望立即加载关系,但也要指定立即加载的条件。下面是一个例子: 在本例中,我们急于加载用户的帖子,但前提是帖子的标题列包含单词“first”。 您如何扭转这种局面,以便您只获得标题栏包含单词“第一”的帖子的用户? 换句话说,我希望只有用户有一个包含单词“第一”的帖子,我想急切地加载