无向图中的前沿

时间:2013-11-10 05:08:27

标签: algorithm graph depth-first-search clrs

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)   是一个后缘,因为在边缘第一时你仍然是灰色的   探讨。

我当然理解这个证据;但对前沿的想法并不十分确信。

Undirected Graph

在上图中,存在从第一顶点到第三顶点(第一行)的前沿。第一个顶点是源。

据我所知,DFS(S)将包括前向顶点1 - > 3.(我显然是错的,但我需要有人帮我直截了当!)

3 个答案:

答案 0 :(得分:2)

看起来你没有包含“前沿”的定义,所以我将从我学到的定义开始。

  

假设u.d< v.d,DFS标记边缘(u,v)前沿 if   当从u到v越过边缘时,v已被标记为已访问。

因此,我声称你不能在无向图中有前沿。

为了矛盾而假设有可能。因此,目标节点已标记为已访问。因此,DFS已经到达并穿过所有相邻边缘。特别是,你必须已经越过相反方向的边缘。因此,边缘已被标记为某种类型的边缘,因此不会被标记为“前沿”。

因此,前沿只能出现在有向图中。


现在,为了防止你混淆“前沿”和“树边缘”,你描述的边缘仍然不一定是树边缘。如果在穿越时,它只是树边缘,这是您第一次访问目标节点。在无向图中考虑它的简单方法是,当您遍历边时,如果已经到达目标节点,则它是后边缘,否则是树边缘。

答案 1 :(得分:0)

我相信你所缺少的是关于算法访问不同顶点的顺序的假设。

假设算法以字典顺序访问顶点。让我们用这个方式命名顶点:

 -------
|       |
S - A - B
|   |   |
C - D - E

在这种情况下,前沿将是S->AA->BB->EE->DD->C。其余边缘是后边缘。

现在让我们重命名图表:

 -------
|       |
S - B - A
|   |   |
C - D - E

在这种情况下,前沿将是S->AA->BB->DD->CD->E(请注意S->AS->B与前一个示例中的边缘不同。)

如您所见,输出取决于算法选择顶点的顺序。当图表是匿名的时,任何输出都可能是正确的。

答案 2 :(得分:0)

在一般图形的DFS树中,有TREE,FORWARD,BACK和CROSS边缘。

在无向图的DFS树中,可能的FORWARD边标记为BACK边。 可能的CROSS边缘标记为TREE边缘。

在这两种情况下,原因是边缘可以在两个方向上遍历,但是你首先将它们视为BACK和TREE,第二次作为FORWARD和CROSS,它们已被标记。

从某种意义上说,边缘既可以是前进也可以是后退,可以是CROSS和TREE,但最初分别是BACK和TREE。