Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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
Search 在等轴测图中搜索一系列节点时,深度优先并没有找到一些可能的路径_Search_Data Structures_Graph Theory_Depth First Search - Fatal编程技术网

Search 在等轴测图中搜索一系列节点时,深度优先并没有找到一些可能的路径

Search 在等轴测图中搜索一系列节点时,深度优先并没有找到一些可能的路径,search,data-structures,graph-theory,depth-first-search,Search,Data Structures,Graph Theory,Depth First Search,我有一个4x4无向图,每个节点之间有垂直、水平和对角的链接/路径。在我的示例中,我将这些节点的内容简化为整数。给定一系列任意长度的数字,我想确定电路板上是否存在由这些数字组成的路径。任何节点都不能使用两次。例如,在下图中搜索789、548和734将返回true,但111、7343和989将返回false 我目前有一个基本上是深度优先的搜索,但我意识到它缺少一些路径。在上述示例中,可能会遗漏12234。如果搜索从1开始,沿对角线移动到2,然后向左移动到2,则无处可去。然后搜索返回,将最右边的2标

我有一个4x4无向图,每个节点之间有垂直、水平和对角的链接/路径。在我的示例中,我将这些节点的内容简化为整数。给定一系列任意长度的数字,我想确定电路板上是否存在由这些数字组成的路径。任何节点都不能使用两次。例如,在下图中搜索789、548和734将返回true,但111、7343和989将返回false

我目前有一个基本上是深度优先的搜索,但我意识到它缺少一些路径。在上述示例中,可能会遗漏12234。如果搜索从1开始,沿对角线移动到2,然后向左移动到2,则无处可去。然后搜索返回,将最右边的2标记为已访问,并阻塞唯一正确的路径

我所能想到的改进是向每个节点添加额外的状态,以记录访问它们的深度。这将消除这种情况,并肯定使其更加正确。但这仍然是上图中27979的一个问题。如果搜索从最左边的2开始,向下并向右移动到7,向上向右移动到9,向上向左移动到7,它将再次阻塞正确的路径


似乎我使用了错误的搜索方式,但什么是正确的搜索方式?

似乎我想出了一个解决方案,我将与大家分享,以防其他人发现这是未来


在每次搜索中,我都会构建一棵带有双向链接的树,这样在每个地方,路径都可以走多个分支,就像广度优先搜索一样。不同之处在于,树的每个分支都可以使用任何其他未连接分支的节点。当每个节点被添加到树中时,我跟随链接返回到根,并根据每个链接检查节点,以消除循环路径的可能性,并允许重用其他路径中的节点。分支达到所需深度后,我回溯到root以记录路径

如果你有一个解决方案,你可以回答你自己的问题。这比将解决方案放在注释中更可取。我还建议对图形使用更常见的符号来指示连接的节点:
1->2,2->3
。ASCII图表不能解决这个问题justice@omouse我在这里怎么用这个符号?在某些地方,分支因子是8。我同意缺少ASCII图,但我认为没有比这更好的方法了。@RyanS很好的一点是ASCII图更多compact@omouse谢谢你的照片。:)