具有约束的强连接组件

时间:2015-11-12 16:32:01

标签: algorithm graph-theory strongly-connected-graph

我遇到过这样的问题。

我们得到一个无向图,其中每条边都有一个值。现在额外的约束是不能从较高值边缘移动到较低值边缘。人们总是必须从较低价值转向较高价值。

图示该问题可以描述为

                                   1
                               1 /   \ 1
                                /     \
                               3       7
                            2 / \  3   
                             /   \
                            4     5

所以我们可以从7开始 - > 1 - > 3 - > 4而不是4 - > 3 - > 1.因此,在此图中,我们被要求在这里找出强连通组件,如(1,3,7)。

我试图使用Kosaraju的算法,但有这样的约束。

for v in adj[u]:
    if not visited[v] and v.edgeValue >= u.edgeValue:
        do work here

但我认为逻辑是错误的,我无法找出失败的原因。 有人可以指出错误并显示某种伪代码吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

嗯,在你的约束中,允许的方向取决于你的旅行历史。这使得连通组件具有不同的含义。我假设通过强连通分量表示对于来自任何顶点的子图,可以到达该子图的任何其他顶点。由于您的约束指定您不能从较低值边缘移动到较高值,这意味着任何强连接的子图包含具有相等加权边的树。

因此,在上面的示例中,您将(4,3)(3,5)(3,1,7)作为图形的一个特定分区成为强组件。您可以通过执行简单的DFS或BFS来获得这些,同时仅包含特定权重的边缘。