algorithm - 将 1 块插入不完美的河内塔的算法
问题描述
我正在为我的机器人手臂做一个程序来建造河内塔。我让算法在一个站立的塔上工作(仅使用 3 个位置将塔更换到不同的地方)。
位置: A、B、C
件数: 5
我想逐步建立塔(我将在位置 C 上放置一块,手臂将一块放在位置 A 上/进入塔中)。如果当前部分位于顶部,则代码正在工作。
问题:是否有(递归)算法仅使用 3 个位置(A 是当前的塔,C 是新的棋子,B 是空的)将棋子放入塔中?
编辑:我不是想在不同的地方建造塔楼。我要求一种算法,可以将 C 上的一块放入 A 上的塔中(假设塔是 5-3-2-1,我将最后的“4”块放在 C 上。算法应该将它放入使其成为 5-4-3-2-1 的正确位置)。
解决方案
您已经“......让算法在站立的塔上工作(仅使用 3 个位置将塔更换到不同的地方)......”,因此请执行以下操作:
确定堆栈 A 中有多少块小于堆栈 C 中的块。将此数字称为k。它可能是零,在这种情况下,您可以通过一次操作将块从堆栈 C 移动到堆栈 A。如果不:
完全忽略堆栈 A 中位于顶部k件以下的件。执行此步骤和以下步骤,就好像它们不存在一样。现在使用您现有的算法(将堆栈完全移动到另一个位置),将顶部k元素从堆栈 A 移动到位置 B。我们忽略的部分不参与此移动。
然后将棋子从堆栈 C 移到堆栈 A。现在在下一步中也忽略此棋子。所以我们现在可以假设堆栈 A 是空的。
再次使用您的算法将堆栈 B 移动到位置 A。同样,我们忽略已经在位置 A 的部分:它们在此步骤中不会移动。
推荐阅读
- kotlin - Kotlin 链接来自不同 InputStream 的多个序列?
- ruby-on-rails - 具有不同类型地址的配置文件和 2 个配置文件可能共享相同的地址
- algorithm - 排列从 1 到 100 的列表,使得对于任何索引 i,它映射到不等于 i 的 j
- javascript - React:在构造函数中将状态属性初始化为某个值,但在渲染时返回未定义
- reactjs - 在辅助函数中调用 axios 时无法读取属性“then”
- node.js - Angular 客户端启用 CORS
- javascript - 检查用户名是否存在?
- python - 合并不同时间间隔的 Pandas DataFrame 时,如何用常数值填充 NaN
- python - 在python中找到最大梯度的位置
- javascript - 通过将对象的数据存储在变量中来打印对象的数据