有没有人知道以下问题的算法:
给定一个无向连通图,找出方法的数量2 可以切割不同的边缘,使图形断开连接。
我认为问题的一部分(我知道算法)是计算可以切断1行的方式的数量,以便它变得断开连接。然后计算这些可以与其他行分组的方式得到值(M-K)*K + K*(K-1)/2
,M
=否。边缘,K
=否。 1个边缘切割。
我不知道该怎么做的部分是找到切割2行的其他方法的数量,例如在只有周期1 - 2 - 3 - 1
的图中,任何边的组合都是有效的方式切割线以使图形断开。
我编写了程序中找到所有1个边缘切口的部分,然后通过删除这些边缘将图形拆分为双连通分量。我尝试为第二部分写了一些内容,为此制作了两个版本,但没有一个在每次测试中得到正确的答案。
有关此作业问题的其他信息: *边数是< 100000 *顶点的数量是< 2000 *在具有上述限制的任何图表上,程序最多应运行2秒 * 2个顶点之间可以有多条边。
我可以在O(N + M)中完成第一部分。我想第二部分的复杂性应该是最大O(N * M)。
答案 0 :(得分:7)
您正在寻找包含两条边的所有edge cuts。仅当图表最多为2-edge-connected时,才会存在此类边缘切割。
Karzanov和Timofeev撰写的论文“Efficient algorithm for finding all minimal edge cuts of a nonoriented graph”包含一种计算图形的所有最小边缘切割的算法。从简单的角度来看,在我看来,似乎该算法也可用于查找具有指定边数(例如,2条边)的切割。算法的复杂度为O(lambda ^ 2),其中lambda是所需切割中的边数(在您的情况下为2),n是顶点数。
答案 1 :(得分:0)
简单的解决方案:对于所有边缘对,从图形中删除它们并查看它是否仍然连接。它是O(n ^ 3)但应该有用。
答案 2 :(得分:0)
此问题是2边连接问题的扩展。为确保图表中的任何边(v, w)
不是桥梁,我们会发现从adjacent to w and including w
到ancestor of v
的顶点的后边缘。这里,祖先意味着在v
之前发现的顶点。
现在,如果只有一个这样的后边缘,那么移除that back-edge and (v, w)
时会使图形断开连接。