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 如何跟踪访问bfs/dfs中所有节点的路径_Search_Graph_Depth First Search_Breadth First Search_Graph Traversal - Fatal编程技术网

Search 如何跟踪访问bfs/dfs中所有节点的路径

Search 如何跟踪访问bfs/dfs中所有节点的路径,search,graph,depth-first-search,breadth-first-search,graph-traversal,Search,Graph,Depth First Search,Breadth First Search,Graph Traversal,这与类似,但在那篇文章的答案中描述的方法似乎不适用于我的案例 这里的路径基本上是指从开始到结束状态的一系列连接节点 考虑一个顶点为V={a,b,c}且边为{{a,b},{a,c}的无向图,并假设我们必须按字母顺序遍历后继图。我们从节点a开始,结束状态是访问所有3个节点 宽度优先搜索将首先访问边缘a->b,然后访问边缘a->c。因此,解决方案路径是a->b->a->c。由于b和c之间没有边界,我们必须返回a(因此我们必须遍历边界b->a)。在上面链接的帖子中的答案中,接受的解决方案将只输出a->c

这与类似,但在那篇文章的答案中描述的方法似乎不适用于我的案例

这里的路径基本上是指从开始到结束状态的一系列连接节点

考虑一个顶点为V={a,b,c}且边为{{a,b},{a,c}的无向图,并假设我们必须按字母顺序遍历后继图。我们从节点
a
开始,结束状态是访问所有3个节点

宽度优先搜索将首先访问边缘
a->b
,然后访问边缘
a->c
。因此,解决方案路径是
a->b->a->c
。由于
b
c
之间没有边界,我们必须返回
a
(因此我们必须遍历边界
b->a
)。在上面链接的帖子中的答案中,接受的解决方案将只输出
a->c


我想不出一种方法来修改传统的bfs算法来做到这一点。我对dfs有同样的问题,但我现在想从bfs开始

想这样做似乎很奇怪。深度优先搜索(DFS)当然更简单,它总是跟随一条边或沿着该边回溯。相比之下,广度优先搜索(BFS)通常不会访问(或回溯到)与先前访问的节点相邻的节点

具体来说,你问题的这一部分是错误的,并且揭示了一种误解:

由于
b
c
之间没有边界,我们必须返回
a
(因此我们必须遍历边界
b->a

在您的示例中,BFS永远不会从
b
a
来回移动边。它完成访问
b
,然后从队列中轮询
c
,并立即访问
c
,而无需通过
a
到那里“旅行”

打个比方,把DFS看作是在寻找一条路径是有道理的;如果你在迷宫中,你可以用面包屑来标记你“访问过”的地方,从而通过DFS解决迷宫问题。相比之下,人类无法通过BFS解决迷宫问题,因为人类无法拥有一列他们知道如何到达的地方,并且无法“传送”到队列中的下一个地方。BFS不会有意义地沿着图中的边绘制出您可以遵循的路径



也就是说,如果您真的想要,您可以构造一条访问图中节点的路径,这样每个节点第一次访问的顺序与BFS相同。实现这一点的最简单方法是执行BFS以“BFS顺序”构建节点列表,同时构建“BFS树”。然后,对于BFS顺序中的每个节点,您可以通过BFS树中它们的最低公共祖先从上一个节点到达它。此路径仅通过先前已按BFS顺序访问的节点。

a->b->a->c
表示访问的节点顺序。路径不是那个序列。从
a
c
的路径不是经过
b
,而是直接经过
a>c
。但是如果按字母顺序遍历后续路径,则从
a
c
的路径必须经过
b
。没错。您正在遍历以搜索路径。遍历顺序确实是
a->b->a->c
。找到的路径是
a->c
请回复这两个答案postedIt实际上是一个项目的一部分,特别是旅行推销员问题,我们的任务是通过使用各种搜索方法(如BFS、DFS、UCS、a*)访问所有城市的图来找到一条连续路径。。。我最终找到了如何做到这一点,这需要在状态空间而不是图形空间中完成。