Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 骑士巡演的实施和结束条件_Algorithm_Tree_Racket_Depth First Search_Backtracking - Fatal编程技术网

Algorithm 骑士巡演的实施和结束条件

Algorithm 骑士巡演的实施和结束条件,algorithm,tree,racket,depth-first-search,backtracking,Algorithm,Tree,Racket,Depth First Search,Backtracking,我正在尝试在Racket中使用DFS实现Knight's Tour 我当前的实现涉及到从当前位置生成一个不在板外、也不在前面可能的步骤列表中的合法移动列表,并将其放入堆栈中。然后我从堆栈中取出第一个元素,递归地运行算法,并将其作为下一个当前位置。如果移动的次数超过了棋盘上的方块数,那么我知道我已经做了彻底的搜索并失败了。如果我不能生成任何合法节点,我就知道我已经完成了骑士之旅并输出了生成的多维数组。我还计算了产生的儿童合法移动的数量;如果该数字大于预设的max_node_count,则将中止该算

我正在尝试在Racket中使用DFS实现Knight's Tour

我当前的实现涉及到从当前位置生成一个不在板外、也不在前面可能的步骤列表中的合法移动列表,并将其放入堆栈中。然后我从堆栈中取出第一个元素,递归地运行算法,并将其作为下一个当前位置。如果移动的次数超过了棋盘上的方块数,那么我知道我已经做了彻底的搜索并失败了。如果我不能生成任何合法节点,我就知道我已经完成了骑士之旅并输出了生成的多维数组。我还计算了产生的儿童合法移动的数量;如果该数字大于预设的max_node_count,则将中止该算法

我认为这个实现可能缺少一些东西。如果我只是移动到堆栈中的下一个位置,我会绕着棋盘跑,而不必进行骑士之旅吗?我如何跟踪之前的正确位置和回溯?或者我应该使用不同的条件来检查是否完成。我想我是无意中提前切断了算法

当我运行当前的实现时,我会收到一条消息,表明我已经完成了搜索。我正在5x5板上进行测试,因此肯定会有解决方案

我在想,当我进行了彻底的搜索,或者当我完成了骑士之旅时,我的检查条件有问题。我下面的评论应该会更详细地说明我是如何实现这些检查的


谢谢您的阅读,谢谢您的帮助。

您记录了之前的所有动作吗?如果这是DFS,您应该避免重复相同的移动!是的,以前的动作都会被记录下来,如果一个动作已经在以前的动作列表中,则不会生成后续动作来表示该动作。所以这应该足够了,这一步已经保证你不会陷入任何无限循环。但是当我运行代码时,它告诉我它已经完成了彻底的搜索,在5x5板上找不到路径。在这样大小的电路板上,肯定会有一个解决方案。我认为当我执行彻底搜索时,我的条件是错误的,或者我的获胜条件是错误的。我的获胜条件是如果我不能产生任何继任者。我的穷举搜索条件是,到目前为止所采取的步骤数是否大于棋盘上可用的方块数。我开始认为,当我无法生成更多的继任者时,我已经进行了穷举搜索。如果是这样,那么我需要一个新的胜利条件。也许我可以扫描电路板,如果所有的元素都大于0,那么我就成功了。每个参观过的广场都标有一个步骤编号,指示参观每个广场的顺序。