这是河内算法的递归塔是一种不知情的搜索
Is this recursive Tower of Hanoi Algorithm a type of uninformed search?
void Form(int N, char pegA, char pegB, char pegC) {
if (N == 1)
cout<<"move top disk on peg "<<pegA<<" to peg"<<pegC<<endl;
else {
Form(N-1, pegA, pegC, pegB);
cout<<"move top disk on peg "<<pegA<<" to peg"<<pegC<<endl;
Form(N-1, pegB, pegA, pegC);
}
}
这是河内游戏塔的递归算法。这可以是深度优先搜索的一种形式吗?如果没有,那是什么?谢谢
这不是一个深度优先的搜索,因为我们知道每次要进行哪种动作,因此别无选择。您可以这样考虑。只不过是。
看,对于深度第一次搜索,我们该怎么办?我们更深入,然后尝试找到正确的方法。但是在这里,您能告诉我一举一动吗?没有。
因此,这是一种简单的递归方法,我们求解了问题的较小实例,然后 construct >较大的,简单地说,从较小的结果来看。就是这样。
这不是第一次搜索的深度。
这是递归树
算法内置的逻辑是在算法中内置的,它巧妙地使用递归来处理每个子塔过渡。这里没有搜索。
该算法以以下方式起作用
- 递归结束:
- 剩下一个磁盘时,将其移至目的地钉
- 这是每个子塔的末尾
- 递归逻辑:
- 将所有磁盘移动到我们感兴趣的一个磁盘上方
- 输出我们感兴趣的磁盘的移动命令
- 移动我们刚移动的磁盘上方移动之前移动的所有磁盘。
这样做的方式是通过对PEG参考的巧妙(且令人困惑的(操纵。它重现是源和目的地钉时,当它进行第二个递归调用时。
要注意的另一件事:
该算法中没有持久状态。每层关心的唯一状态是n
的状态,只有在1或1的情况下。在功能输入时,已知当前层的状态(在启动钉(和上面的所有层(也在start PEG上(,并且不需要电流以下的任何磁盘的状态。
这就是为什么不需要真正移动的原因;众所周知,有关状态变化的知识可以编码到算法中(并且是按照传递到递归呼叫的钉的变化顺序(。无需基于当前状态的决定,因此无需实现状态。
相关文章:
- 为什么二进制搜索在我的测试中不起作用
- 使用不变量来确定二分搜索中的边界条件
- 二叉搜索不收敛为双倍
- 返回不需要的值的二叉搜索程序
- 如何在不知道对应关系的情况下在字符串中搜索字符并将其分配给另一个字符?
- 基于函数而不是集合的二分搜索或迭代器?
- 我们可以使用地图而不是二叉搜索吗?
- 为什么"/usr/include"不在 GCC 默认搜索路径中
- Cmake FindBoost.cmake MinGW-W64:搜索名称不正确的库
- 简单的二分搜索对我不起作用。我正在尝试从文本文件中搜索单词
- C++ Eclipse:二叉搜索树节点>数据=变量似乎不起作用
- C++二叉搜索树实现不会添加每个元素
- 这是河内算法的递归塔是一种不知情的搜索
- 搜索 ID 不能用作函数错误
- 删除节点方法实际上不会删除二叉搜索树中的节点.C++
- 二进制搜索树不变的标头文件
- 在向量中找不到搜索词
- 使用cygwin编译C++不会搜索提供的包含路径
- 默认情况下,ubuntu 11.04的金色链接器不会搜索/usr/local/lib
- 搜索不带搜索栏的UITableView