将 1 件插入不完美的汉内塔的算法
Algorithm to insert 1 piece into imperfect Tower of Hanoi
我正在为我的机器人手臂编写一个程序来建造河内塔。我让算法在立塔上运行(仅使用 3 个位置将塔替换到不同的地方)。
地点: A、B、C
件数: 5
我想一步步搭起塔(我先把棋子放在C位,手臂把棋子onto/into塔放在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 的棋子:它们在此步骤中不会移动。
我正在为我的机器人手臂编写一个程序来建造河内塔。我让算法在立塔上运行(仅使用 3 个位置将塔替换到不同的地方)。
地点: A、B、C
件数: 5
我想一步步搭起塔(我先把棋子放在C位,手臂把棋子onto/into塔放在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 的棋子:它们在此步骤中不会移动。