给定一个图表,我想找到所有边缘(如果有的话),如果删除它会将图形分成两个部分。
最初的想法是为所有边分配权重1,然后计算图的最小值。 mincut> 1意味着没有单个边缘在被移除时导致分裂。
对于mincut == 1,如果算法为每个mincut提供它所包含的边缘,那就太好了。
不幸的是,BGL似乎不支持这种事情:
stoer_wagner_min_cut函数确切地确定了一个最小切割及其重量。
(http://www.boost.org/doc/libs/1_59_0/libs/graph/doc/stoer_wagner_min_cut.html)
有没有办法让这个工作(即确定多个小切割)与BGL或我必须提出不同的东西?
答案 0 :(得分:0)
这可能会有点晚......
从我看到的你只需要找到不属于图中任何周期的所有边(假设图已经连接)。
这可以通过迭代删除叶节点(以及连接到它们的边)来完成,就像你在topological sorting中所做的那样,直到没有叶子节点离开,即剩下的每个边缘图表属于至少一个周期。在此过程中删除的所有边缘都将是您想要的边缘。
在伪代码中,对于连接的无向图G=(V,E)
,您可以这样做:
S = Ø
while(there exists a node n∈V s.t. degree(n)==1)
e = edge connected to n
S = S∪{e}
E = E-{e}
V = V-{n}
return S
可以在O(| V | + | E |)时间内完成