有双向图,删除连接某些节点的路径的最佳方法是什么?

时间:2014-04-22 17:31:09

标签: algorithm graph graph-theory

想象一下,我有一个带有4个节点的双向图,其中包含以下连接:

  

0< - > 2; 0 - < - > 3; 1 - < - > 2; 1 - < - > 3

现在假设我有一组节点K(0和1),我想计算我必须删除的最小连接数,以便这些节点不是全部连接的。

  

0< - > 3; 1 - < - > 2

这种方式没有可以连接0和1的路径。实际上即使节点组K类似于10个节点,如果至少有1个节点也可以连接9个(这就是为什么我使用高情况为“所有“上面”。

另一个例子是:

  

0< - > 2; 0 - < - > 3; 0 - < - > 4; 1 - < - > 2; 1·; - →3

和一组节点K(0,1,4)我只需要删除1个连接以避免它们连接

  

0< - > 4

我自己尝试了很多东西,比如计算K组的所有路径并检查重复路径并删除它们,但它并不适用于所有情况(就像我上面发布的第一个)

是否有一种算法可以帮助我解决这个问题?我试过谷歌,但我找不到这类问题的文档,也许它不常见。

提前感谢。

2 个答案:

答案 0 :(得分:2)

示例1: 从图表中可以看出:

(0,2),(0,3),(1,2),(1,3)

      2
    /   \
   0     1
    \   /
      3

K(0, 1)

像这样创建一个树:

     0
    / \
   2   3
  /     \
 1       1

每个分支从0开始并在1结束。如果分支未达到1,则不包括在内。移除最上边缘(如果在该点下方分支)。如果您从0到1或从1到0构建树并不重要,因为图是双向的。

示例2: 图:

  (0,1),(1,2),(2,3)

  0 -- 1 -- 2 -- 3

K(1, 2)

树:

1
|
2

卸下:

  (1,2)

示例3: 图:

(0,2),(0,3),(0,4),(1,2),(1,3)

    0
  / | \
 2  3  4
 \ /
  1

K(0, 1, 4)

树:

   0
 / | \   <-- 2 edges leading to 1; 1 edge leading to 4
2  3  4
|  |
1  1

卸下:

(0,4)

答案 1 :(得分:0)

您可以计算每个节点的边数。如果断开节点的所有边缘,则断开图形。因此,您必须删除的最小连接数是具有最小边的顶点具有的边数。

假设您的图表具有双向连接0-1,0-2,0-3,2-3,3-1。 0有3条边连接它。 3有3个连接它的边缘。 1有2个连接它的边缘。 2有两条连接它的边缘。

所以你应该删除0-2和2-3以断开图2的连接。现在你不能再从2点到任何其他点了。