我们有一个弱无环图。
我们还给出了一个集合A,它保存具有度为零的G的顶点,以及一个集合B,其保持具有度数为零的顶点。 (A的大小小于B的大小)。
除此之外,我们还知道如果A和B中的项目具有特定顺序(例如A = a1,a2,...,am和B = b1,b2,...,bn),则为DFS开始于ai访问bi(1≤i≤m)。
是否有可能设计一种线性时间算法,通过将G添加到尽可能少的边缘来使G强连接?
答案 0 :(得分:4)
添加弧b j - > a = sub> j + 1 表示j = 1,...,m-1和arcs b j - > a 1 表示j = m,...,n。
结果图强连接,因为a和b通过添加的弧和从 i 到b i 的路径强连接,并且对于每个节点x ,存在i,j,原始图中存在从 i 到x的路径,以及原始图中从x到b j 的路径。
我们不能使用更少的弧,因为必须在每个b 1 ,...,b n 中添加传出弧。
答案 1 :(得分:1)
已编辑 - 以下不会生成包含最少链接的解决方案:
您可以在线性时间内运行http://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm。我建议你这样做并注意“在任何后继者之前都不会识别出强烈连接的组件”。因此,图表中的第一个强组件不得是任何其他组件的后继组件。我建议每次发出一个没有后继的强连接组件,然后添加一个链接到第一个组件的链接。我建议你每次基本上重新启动Tarjan算法时都要添加一个链接,使用非连续调用strongconnect(),将第一个组件连接到你重新启动的顶点。
使用这些链接,您可以从第一个强组件到每个其他组件,从每个其他组件到第一个强组件。 - 不幸的是,这不一定是链接最少的解决方案 - 请参见Per下面的第二条评论。