图论:删除节点,但创建新顶点以保持图形连接

时间:2017-09-29 06:12:47

标签: graph theory directed-graph

我需要删除某种类型的节点,但我希望图表保持连接状态。

这是一个有向的非循环图。

示例:

enter image description here

我想运行一个算法来删除所有“B”节点并仅保留“A”,结果如下:

enter image description here

我想知道是否有可以解决这个问题的图论算法?

1 个答案:

答案 0 :(得分:1)

我使用算法和图论已经很多年了,所以如果我的答案看起来有点生疏,我会提前道歉。

Create a worklist W.
Add r, the root node, to W.
While W is not empty:
    Remove the first entry from W; call it s.
    For each of s's children:
        Add it to W.
    If s is of type B
        In the graph, set s's parent to be the parent of s's children.
        Remove s from the graph.

对于根节点是B类型的情况,我认为可以创建一个虚拟根(类型为<> B)作为原始根节点的父节点。虽然最终的图形仍然是连接的,但它取决于您的要求,因为需要删除虚拟根。在您的示例中,A2将是一个孤儿,并将被丢弃。但你也可能最终得到两个或多个断开的图:A2 - > A5; A3 - > A4(例如)