algorithm - 如何解决这个汉诺塔变体

标签 algorithm recursion

我一直在努力想办法解决我遇到的汉诺塔的一个变体,它有一个限制,即每一步都应该涉及中间 Hook 。下面是没有约束的普通汉诺塔的代码:

   public void Transfer(int numberOfDisks, Stack<int>[] pegs, int @from, int to, int use)
   {
       if (numberOfDisks > 0)
       {
           Transfer(numberOfDisks - 1, pegs, @from, use, to);

           pegs[use].Push(pegs[@from].Peek());
           pegs[@from].Pop();

           Console.WriteLine("Move disk: " + numberOfDisks + " from P" + @from + " to P" + to);

           Transfer(numberOfDisks - 1, pegs, use, to, @from);
       }
   }

最佳答案

1. move smallest for 2 moves in 1 direction.
2. move other token (only possible token) by 1 move
3. goto point 1

关于algorithm - 如何解决这个汉诺塔变体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28128357/

相关文章:

assembly - 了解递归 IA32 汇编调用

无法理解for循环中的递归

algorithm - 从 2D 网格创建多边形的有效算法? (顶点+边)

Objective-C:计算类别中对象的有效方法

algorithm - AVL Tree数据结构实现优先级队列

javascript - 像素网格上的递归填充函数?

c - 简单地?找到没有敌人的游戏屏幕部分的算法

html - 如何在不溢出的情况下将大量图像放入窗口区域

php - 使用php计算关联数组中元素的深度

c++ - 递归数独求解器几乎可以工作,但空网格会出现堆栈溢出