- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我能够想出一个算法(合乎逻辑的)来解决汉诺塔问题的 k-peg 解决方案,但是当我实现我的代码时,我遇到了段错误。
void move(int number_of_disks, int source, int dest, vector <int> free_peg, int pointer)
{
int p;
if (1 == number_of_disks)
{
moves++;
move_top_disk (source, dest);
}
if(free_peg.size() > 2)
p = number_of_disks/2;
else
p = number_of_disks - 1;
moves++;
//Move top "p" disks from peg 1 to peg i
move(p, source, free_peg.back(),free_peg, pointer);
//Move "n - p - 1" disks from peg 1 to another peg
move(number_of_disks - p - 1, source, free_peg[pointer--], free_peg, pointer++);
//Move the "last disk" from the source peg to the destination
move_top_disk(source, dest);
//Move "n - p - 1" disks from peg (i - 1) to the final peg
move(number_of_disks - p - 1, free_peg[pointer--], dest, free_peg, pointer++);
//Move "p" disks from peg i to the destination
move(p, free_peg.back(), dest, free_peg, pointer);
}
这个想法非常简单,我保留了一个免费的钉子(或塔) vector ,并在我移动我的磁盘时更新它。所以对于 6 个钉子和 n 个磁盘的情况,我有一个源、一个目标和 4 个空闲钉子。这个想法是将 (n - p) where p ~ n/2 从源移动到 free_peg[3](第四个自由 Hook )。现在我的 vector 中只有 3 个空闲钉,我使用这 3 个空闲钉将 (n - p - 1) 个磁盘移动到 free_peg[2],然后我将最后一个磁盘从源移动到目标。所以现在我有 2 个免费 Hook 和 1 个源 = 3 个免费 Hook 。接下来,我需要使用 3 个空闲的 Hook (包括现在免费的源)将 (n - p - 1) 个磁盘从 peg[2] 移动到目的地。最后,使用 4 个空闲钉将 p 个磁盘从 free_peg[3] 移动到目的地。但是,当我在我的代码中实现它时,我遇到了段错误,有人可以帮我解决这个问题吗?
最佳答案
我能够解决 k-peg 通用解决方案,感谢您的帮助。以下是该算法的运行方式:
void move(int number_of_disks, int source, int dest, vector <int> free_peg)
{
int p, middle, g;
if (1 == number_of_disks)
{
moves++;
move_top_disk (source, dest);
}
else
{
moves++;
if(free_peg.size() >= 2)
p = number_of_disks/2;
else
p = number_of_disks - 1;
//Move top "p" disks from peg 1 to peg i
middle = free_peg.back();
free_peg.pop_back();
free_peg.push_back(dest);
move(p, source, middle,free_peg);
//Move "n - p " disks from peg 1 to another peg
free_peg.pop_back();
move(number_of_disks - p, source, dest, free_peg);
//Move p from current peg to the final peg
free_peg.push_back(source);
move(p, middle, dest, free_peg);
}
}
关于c++ - 汉诺塔 [编辑] - k peg 解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12545231/
这是我正在做的作业。我创建了 2 个类来玩汉诺塔。第一个基本上是运行实际游戏类的运行者。 import java.util.Scanner; class TowersRunner { publ
这是我为汉诺塔问题编写的 Python 代码,其中塔必须从左桩转移到中间桩,使用右桩作为备用: def hanoi(n, origin = "1", destination = "2", spare
我正在使用 jQuery 标签!库创建用户“技能”输入表单。我认为这将是一个非常快速和简单的设置,就像大多数 jQuery 库一样,但是我在这个方面遇到了很多麻烦。我尝试按照下面示例中的源代码进行操作
我如何(如果可能)使用 C++11 可变参数编程来定义一系列 vector是在一个函数体内,(或者换句话说,一系列 N 维数组,递减 N 直到 0),就像下面的变量一样? vector>> v; ve
我编写了一个 Ansible playbook,它需要运行它的作业编号作为其参数之一,以便我将对该作业的引用添加到我维护的数据库中。如何获取 Tower 模板以将其传递给剧本? 这是我当前的解决方案,
默认情况下,android 会存储最后 200 个 wifi 连接和 50 个单元位置详细信息。 我使用 WifiManager 中的 getConfiguredNetworks() 获得了 wifi
如何(如果可能)使用 c++11 可变参数编程来定义一系列 vector 's 在函数体中,(或者换句话说,N 维数组的序列,N 's 递减直到 0),就像下面的变量? vector>> v; vec
我们正在 Tensorflow 上运行多 GPU 作业,并评估从基于队列的模型(使用 string_input_producer 接口(interface))到新的 Tensorflow 数据集 AP
我有一个由另一个进程启动的 Ansible 作业。现在我需要检查 Ansible Tower 中当前正在运行的作业的状态。 我可以使用 REST API 使用 /jobs/{id} 跟踪状态是否正在运
我正在使用一个非常棒的插件,名为 jQuery Tagit在我当前项目的开发中。 一切都进行得很顺利(令人怀疑),直到我尝试添加自己的一小部分 jQuery。我的目标是让最终用户可以选择使用按钮添加标
我是一名优秀的程序员,十分优秀!