想象一下,我有一个带有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组的所有路径并检查重复路径并删除它们,但它并不适用于所有情况(就像我上面发布的第一个)
是否有一种算法可以帮助我解决这个问题?我试过谷歌,但我找不到这类问题的文档,也许它不常见。
提前感谢。
答案 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点到任何其他点了。