【问题标题】:Graph Theory: Remove nodes, but create new vertices to keep graph connected图论:删除节点,但创建新顶点以保持图连接
【发布时间】:2017-09-29 06:12:46
【问题描述】:

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

它是一个有向非循环图。

例子:

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

想知道有没有图论算法可以解决这个问题?

【问题讨论】:

  • 看看你的例子,你是否考虑 A1 可能是 B0 的情况?如果你不单独处理,那么你最终会得到一个不连通的图。
  • @PeterAbolins:公平的问题:结果可能是一个未连接的图。如果 A1 是 B0,我希望输出仅为 A3->A4。 A2 将没有指向它的顶点。我想我并不是真的想要连接图形,我只想要 A 类型之间的顶点。
  • 如果我的解决方案有帮助,您想将其标记为答案吗?如果没有,请告诉我。谢谢:)

标签: graph theory directed-graph


【解决方案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(例如)

【讨论】:

  • 我最终使用了你的算法。我在将 s 的父级设置为 s 的子级的父级的步骤中进行了更改。 s 可以有多个父级。所以我创建了从 s 的父母到 s 的孩子的边。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多