CLRS - 第22章
定理22.10
在无向图G的深度优先搜索中,G的每个边都是 无论是树边还是后边缘。
证明让(u,v)成为G的任意边,并且假设没有丢失 普遍性,u.d< v.d.然后搜索必须发现并完成v 在它结束之前(虽然你是灰色的),因为v在你的邻接上 名单。如果第一次搜索探索边缘(u,v),它就在 从u到v的方向,然后v是未被发现的(白色)直到那个 时间,否则搜索已经探索过这个优势 从v到u的方向。因此,(u.v)成为树边缘。如果 搜索(u,v)首先从v到u的方向,然后(u,v) 是一个后缘,因为在边缘第一时你仍然是灰色的 探讨。
我当然理解这个证据;但对前沿的想法并不十分确信。
在上图中,存在从第一顶点到第三顶点(第一行)的前沿。第一个顶点是源。
据我所知,DFS(S)将包括前向顶点1 - > 3.(我显然是错的,但我需要有人帮我直截了当!)
答案 0 :(得分:2)
看起来你没有包含“前沿”的定义,所以我将从我学到的定义开始。
假设u.d< v.d,DFS标记边缘(u,v)前沿 if 当从u到v越过边缘时,v已被标记为已访问。
因此,我声称你不能在无向图中有前沿。
为了矛盾而假设有可能。因此,目标节点已标记为已访问。因此,DFS已经到达并穿过所有相邻边缘。特别是,你必须已经越过相反方向的边缘。因此,边缘已被标记为某种类型的边缘,因此不会被标记为“前沿”。
因此,前沿只能出现在有向图中。
现在,为了防止你混淆“前沿”和“树边缘”,你描述的边缘仍然不一定是树边缘。如果在穿越时,它只是树边缘,这是您第一次访问目标节点。在无向图中考虑它的简单方法是,当您遍历边时,如果已经到达目标节点,则它是后边缘,否则是树边缘。
答案 1 :(得分:0)
我相信你所缺少的是关于算法访问不同顶点的顺序的假设。
假设算法以字典顺序访问顶点。让我们用这个方式命名顶点:
-------
| |
S - A - B
| | |
C - D - E
在这种情况下,前沿将是S->A
,A->B
,B->E
,E->D
,D->C
。其余边缘是后边缘。
现在让我们重命名图表:
-------
| |
S - B - A
| | |
C - D - E
在这种情况下,前沿将是S->A
,A->B
,B->D
,D->C
,D->E
(请注意S->A
和S->B
与前一个示例中的边缘不同。)
如您所见,输出取决于算法选择顶点的顺序。当图表是匿名的时,任何输出都可能是正确的。
答案 2 :(得分:0)
在一般图形的DFS树中,有TREE,FORWARD,BACK和CROSS边缘。
在无向图的DFS树中,可能的FORWARD边标记为BACK边。 可能的CROSS边缘标记为TREE边缘。
在这两种情况下,原因是边缘可以在两个方向上遍历,但是你首先将它们视为BACK和TREE,第二次作为FORWARD和CROSS,它们已被标记。
从某种意义上说,边缘既可以是前进也可以是后退,可以是CROSS和TREE,但最初分别是BACK和TREE。