我想我现在明白了为什么我们不能保证原始图中的最低位数是一个接收器(它可能有前向已经被访问过的顶点的外边缘)。
但为什么反转图表和查看最高职位数的情况有所不同?为什么在原始图的接收器SCC中找到顶点是一种万无一失的方法?
答案 0 :(得分:1)
重要的是,对于由边缘(A,B)连接的两个强连接组件A和B,即边缘从 A 入射到 B,A的最高职位数总是比B的最高职位数。
从现在开始,让我们将强连通分量C的最高位数表示为h(C)。
但为什么反转图表和查看的情况有所不同 最高职位数?为什么这是一种找到顶点的简单方法 在原始图的宿SCC中?
正如你所说,首先,你看一下最大h(C)。根据第一段,C上的所有边缘必须传出或h(C)不会是最大的。
如果您现在反转图表,则C上的所有边缘必须传入;他们只是被逆转了。在C上运行深度优先搜索(DFS)将生成一个仅具有C顶点的树,因为它已经“隔离”并且是一个接收器。 SCC保留了在反转之后每个顶点u可以从该SCC内的每个顶点v到达的属性,因此SCC的顶点不受影响。
现在已经建立了第一个SCC,DFS继续到D,它具有第二高的h(D)。根据第一段,对于表示为E的任何SCC,h(D)大于h(E)。只有h(C)大于h(D),但C的所有顶点都已被访问过!因此,D被隔离,就像C:连接D到任何SCC E的所有边都入射到D,除了 C,所以D 不一个接收器。不过已经访问过C,所以DFS不再访问它了。因此,整个D将被理解为另一个单独的,强连接的组件。
此过程一直持续到最后一个SCC并生成一个林,其中每个树对应一个强连接组件。
答案 1 :(得分:0)
我认为我们反转图表的原因如下: 这是一个堆栈操作。当我们反转图形时,我们首先获取反转图形的接收器SCC,然后将其推入堆栈的顶部...我们重复该操作,最后图形为空。然后拉动图形从堆栈底部开始设置的点,即原始图形的接收器SCC。