【发布时间】:2015-11-12 16:32:00
【问题描述】:
我遇到了一个类似这样的问题。
我们得到一个无向图,其中每条边都有一个值。现在额外的限制是不能从较高价值的边缘移动到较低价值的边缘。一个人总是必须从低价值转向高价值。
问题可以描述为
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
但我认为逻辑是错误的,我无法找出它失败的地方。 有人可以指出错误并显示某种伪代码吗?
谢谢。
【问题讨论】:
-
我们可以分别去 4->3 和 3->1,对吧?如果是这样,我不清楚“强组件”是什么意思。
-
如果我没记错的话,你问的是如何找到所有节点都可以到达组件内任何其他节点的所有强连接组件,这意味着组件中的所有边都具有相同的权重,并且我们该怎么做,对吧?
标签: algorithm graph-theory strongly-connected-graph