Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.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 我们如何找到初始节点以应用该算法? 考虑下面的图G,并考虑在G的算法DFS的执行时,图的边被表征为树边(T)、后边(B)、前边(F)和交叉边(C),如下图所示。对于图中的每个节点,查找节点的发现时间和完成时间。 换句话说,对于图中的每个节点v,找到将算法DFS与该节点关联的值d[v]和f[v]_Algorithm_Depth First Search - Fatal编程技术网

Algorithm 我们如何找到初始节点以应用该算法? 考虑下面的图G,并考虑在G的算法DFS的执行时,图的边被表征为树边(T)、后边(B)、前边(F)和交叉边(C),如下图所示。对于图中的每个节点,查找节点的发现时间和完成时间。 换句话说,对于图中的每个节点v,找到将算法DFS与该节点关联的值d[v]和f[v]

Algorithm 我们如何找到初始节点以应用该算法? 考虑下面的图G,并考虑在G的算法DFS的执行时,图的边被表征为树边(T)、后边(B)、前边(F)和交叉边(C),如下图所示。对于图中的每个节点,查找节点的发现时间和完成时间。 换句话说,对于图中的每个节点v,找到将算法DFS与该节点关联的值d[v]和f[v],algorithm,depth-first-search,Algorithm,Depth First Search,请注意,值d[v]和f[v]只有一个可能的赋值 你能告诉我如何找到初始节点,以便开始应用深度优先搜索算法吗?树的边缘应该形成一个森林。DFS可以启动的节点是没有传入树边的节点。查看节点A-DFS在节点A中可以做什么?它可以转到b或e。我们看到它选择了b,因为a->b是一个树边,a->e是一个前向边(检查树/前向边的定义)。在b中,唯一的选择是访问f。在f中,DFS可以转到a、e或g。我们可以假设它试图访问a(f->a标记为back-edge,因此直到现在一切都是正确的),而不是访问e,也不是试图

请注意,值d[v]和f[v]只有一个可能的赋值


你能告诉我如何找到初始节点,以便开始应用深度优先搜索算法吗?

树的边缘应该形成一个森林。DFS可以启动的节点是没有传入树边的节点。

查看节点
A
-DFS在节点
A
中可以做什么?它可以转到
b
e
。我们看到它选择了
b
,因为
a->b
是一个树边,
a->e
是一个前向边(检查树/前向边的定义)。在
b
中,唯一的选择是访问
f
。在
f
中,DFS可以转到
a
e
g
。我们可以假设它试图访问
a
f->a
标记为back-edge,因此直到现在一切都是正确的),而不是访问
e
,也不是试图访问
b
。但是,我们现在在edge
f->g
上遇到了一个问题。它被标记为交叉边,这意味着DFS以前已经访问过
g
。否则,此边将被标记为树边。因此,我们知道
a
不是初始节点。我们需要尝试其他选择。那么
c
呢?同样,从
c
出来的所有边都标记为交叉,而不是树,因此
c
不是初始节点


那么
d
呢?如果DFS从
d
开始,它可能从
d
g
,这是因为
d->g
被标记为树边。没有节点可从
g
进入,因此它回溯到
d
并访问
h
。在
h
中,它试图访问
g
,但它之前已经访问过,因此
h->g
被标记为交叉正确。很好,因此
d
是此DFS执行的初始节点。在访问包含
d
g
h
的连接组件后,DFS可以从
a
c
重新启动,但我们已经知道,由于这些交叉边,DFS没有从
c
启动。因此,它从
a
开始,在访问
b
f
e
之后,它从
c

开始,您能解释一下为什么DFS启动的节点是没有传入树边的节点吗?“树边应该形成一棵树。”-错误,它们可能形成一个林,这里就是这种情况。@MD-11错误地假设图是连通的。修正了。你知道你的问题在“算法简介”一书中吗?@qqibrow我在深度优先搜索一章中没有找到它?你在哪里看到的/在这一章的结尾。我正在使用第二版。@qqibrow我没有这个版本…:/我有第一个。。。你能给我发一个关于Dijkstra算法的难度练习吗?所以,我们不从a开始,因为如果我们从a开始,在达到f之后,我们必须到g,但是(f,g)是一个交叉边,对吗?另外,为什么d->g->h是一个连接的组件,尽管h->g没有路径?此外,如果我们有一条从x到y的边,这是一条交叉边,我们知道y已经被访问过了,对吗?如果边缘是树的边缘,我们知道y还没有被访问过,对吗?如果我们有后缘或前缘,我们能得出什么结论?“所以,我们不从a开始,因为[…]对吗?”-对。“还有,为什么d->g->h是一个连通的组件[…]?”-嗯,对不起,我不太准确,连通的组件从定义上看是在无向图中的。我的意思是DFS在访问d、g、h(从d开始)后不能去任何地方,因为这些节点没有其他边,所以它必须选择图形的另一个节点并从该节点开始。关于不同类型的边,我粘贴了一张图片,并试图在这个问题中向您解释:。。。如果您不只是将DFS应用于给定的图形,而是获得DFS的结果并希望重建其工作方式,那么您只需要从不同的节点开始模拟DFS,看看是否获得相同的结果。树边是DFS跟随并到达未访问节点的边。后边缘是访问节点的边缘,它是树中当前节点的祖先。前边缘是访问节点的边缘,它是树中当前节点的后代,交叉边缘指向访问节点,这些访问节点既不是树中当前节点的后代,也不是树中当前节点的祖先。您给出了很好的解释。。!!!谢谢!!!你也可以看看这个吗?