In undirected connected graph how to find set of vertices removing which graph becomes disconnected?
我知道在
现在假设我们有上图-。
在上面的图中没有
如何找到一组顶点,以便删除这些顶点后,图形会断开连接。假设有可以移除的顶点限制,它是3。也就是说,我们不能一次删除超过3个顶点来断开图形。
我在想的方法-
第1步-运行算法查找单个发音点。
第2步-如果在第1步之后没有关节点,我们从图中删除一个顶点,然后运行关节点算法,我们为所有人都这样做。图中的顶点。利用这个,我们可以找到两个顶点(第一个是在运行algo之前被删除的顶点,第二个是在运行algo之后被找到的顶点),这些顶点的删除将使图形断开,程序将停止,因为我们找到了一组顶点。
第3步-如果在第2步中找不到顶点集,我们从图中删除2个顶点,然后运行关节点算法。我们在删除后运行此算法每对图形顶点。使用它,我们可以找到一组3个顶点,删除将被断开的图形。如果静止图没有断开,我们不再运行程序,因为我们可以删除的顶点限制是3。
我认为有更好的方法来解决这个问题。
如何在删除哪个图被断开后找到最小顶点集。
找到一组顶点的更好方法是删除哪个图变得不连续。
请参阅http://www.cs.colladora.edu/~hal/papers/expandersc.ps.gz,了解计算最小顶点切割的最佳算法。
对于具有度数(即邻域计数)d的任何顶点,删除其所有邻域d将断开图形(除非这些顶点是图形中唯一的其他顶点)。这样马上就可以给出需要删除的顶点数量的上界,以及可以删除的实际顶点以实现该界:只需查找一个最小度数的顶点,并删除其所有相邻顶点。
在您的示例图中,您知道这是最佳解决方案,因为存在度为2的顶点,并且您已经排除了大小为1的解决方案,因为您发现该图是双连接的(即,不包含连接点)。但是,一般来说,可能会比这个上限做得更好:例如,考虑一个图,它由k顶点上的一个组的2个副本,加上2个附加边(u1,v1)和(u2,v2)组成,其中u1和u2来自第一个组,v1和v2来自第二个组。这可以通过只删除U1和U2(或者只删除V1和V2)来断开,即使最小度数k可以任意变大。