- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在实现汉诺塔问题以更多地了解递归。我能够使用 3 peg 的情况来实现它,但是,当我想使用更多的 peg(以产生更少的移动)时,我理解 Frame-Stewart 解决方案,我必须打破我拥有的磁盘数量并堆叠到 一个 Hook ,并且在我将磁盘从源 Hook 转移到带有所有中间 Hook 的目标 Hook 时,永远不要碰那个 Hook 。但是,我不明白如何将 move(disks, 1, i, {2...K}) 之类的东西写成一个函数。当我从一开始就不知道它们时,我怎么能在函数原型(prototype)中写下所有钉子的名称?我在下面给出了我为 3 磁盘解决方案所做的工作,但在更一般的情况下我需要帮助。
// private member function: primitive/basic move of the top disk
// from the source peg to the destination peg -- and legality-check
void move_top_disk(int source, int dest)
{
cout << "Move disk " << towers[source].front() << " from Peg ";
cout << source+1 << " to Peg " << dest+1;
towers[dest].push_front(towers[source].front());
towers[source].pop_front();
if (true == is_everything_legal())
cout << " (Legal)" << endl;
else
cout << " (Illegal)" << endl;
}
// private member function: recursive solution to the 3 Peg Tower of Hanoi
void move(int number_of_disks, int source, int dest, int intermediate)
{
if (1 == number_of_disks)
{
moves++;
move_top_disk (source, dest);
}
else
{
moves++;
move (number_of_disks-1, source, intermediate, dest);
move_top_disk (source, dest);
move (number_of_disks-1, intermediate, dest, source);
}
}
我不明白我需要对我的“移动”功能进行什么样的更改才能解决 6 个钉子的问题。谢谢
最佳答案
您将需要修改最后一个代码块,它移动的位置,move-top-disk,move。
这里是关于 N 钉的汉诺塔解决方案的文章:Towers of Hanoi with K pegs
关于c++ - Tower of Hanoi - n peg 求解算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12523259/
? 1 2
下面的代码解决了 hanoi 使用预定义函数 moveLOD、swapLOI 和 swapLID 返回 Action 列表的问题。 MoveLOD:将 1 个圆盘从第一个位置移动到三元组第三个位置中的
这个问题在这里已经有了答案: Tower of Hanoi: Recursive Algorithm (29 个答案) 关闭 6 年前。 我有以下汉诺塔的工作程序,我们将从 A--B 塔移动磁盘,C
如您所知,有一些解决汉内塔的方法,但它们要求开始时所有磁盘都在一个塔中。 现在我想知道有什么办法可以解决这个问题,开始时磁盘已经随机分布在塔中。 最佳答案 是的,它仍然是可解的(假设小磁盘之上没有大磁
这是来自 Facebook 招聘样本测试的问题。 有K个钉子。当从钉子的底部到顶部看时,每个钉子可以按半径递减的顺序固定圆盘。有 N 个圆盘,半径为 1 到 N;给定钉子的初始配置和钉子的最终配置,输
我的讲师在测试中向我们提出了以下问题: “给出以下代码: int count=0; static void towersOfhanoi(int n, char source, char target,
我理解递归的概念以及它如何与每次调用叠加。但我无法解释当有两个函数调用由 printf 命令分隔时,递归调用如何工作并打印。谁能向我解释一下这个递归调用是如何工作的? 我找到了一个关于名为“Tower
我正在尝试使用堆栈解决汉诺塔问题。这是我的代码: Init_stack = [0,1,2,3] Buffer_stack = [] Final_stack = [] n = len(Init_stac
这个问题在这里已经有了答案: Tower of Hanoi: Recursive Algorithm (29 个答案) 关闭 8 年前。 我是 Python 的新手,目前正在学习有关汉诺塔和递归的教
锁定。这个问题及其答案是 locked,因为这个问题离题但具有历史意义。它目前不接受新的答案或交互。 规则 汉诺塔是一个谜,如果你不是很熟悉它,这里是它的工作原理: 游戏场由 3 根杆和 x 个圆盘组
我正在实现汉诺塔问题以更多地了解递归。我能够使用 3 peg 的情况来实现它,但是,当我想使用更多的 peg(以产生更少的移动)时,我理解 Frame-Stewart 解决方案,我必须打破我拥有的磁盘
我想统计磁盘的移动次数。但结果我得到了别的东西。 (setq x 0) (defun towersOfHanoi (n from to help) (if (> n 0) ;progn ev
我正在学习 C++ 中的递归,但被以下用于解决汉诺塔问题的 C++ 代码难住了。 void Hanoi(int m, string start, string middle, string end){
这个问题在这里已经有了答案: How does recursive algorithm work for Towers of Hanoi? (2 个答案) 关闭 8 年前。 目前,我正在阅读道格拉斯
我正在尝试实现 Towers of Hanoi .我还没有在我的递归调用之间打印出任何东西,但我一直收到错误提示 '('(LIST) 'NIL 'NIL) should be a lambda exp
我是一名优秀的程序员,十分优秀!