【问题标题】:Subgraph of a graph given a start vertex给定起始顶点的图的子图
【发布时间】:2011-09-15 01:19:21
【问题描述】:

我想得到一个给定顶点开始的图的子图。连接到起始顶点的所有顶点都被视为应返回的子图的一部分。

我已经解决了这个要求,但我很好奇是否有更有效的解决方案。我想出的解决方案是对图进行 DFS 并记录在集合 S 中遇到的每个顶点。然后,我只需从原始图中获取连接到 S 中的一个顶点的所有边,然后我从中构建了一个子图。原始图中的边存储在 C# 字典中,我认为它基本上是一个散列。

DFS 和 BFS 不起作用,因为如果您有两个顶点都具有相同的子节点,则 BFS 或 DFS 将不会遍历这些边之一。因此,这种情况下的子图将包含所有正确的顶点,但会遗漏一些边对。

有没有比我想出的更好的解决方案?

【问题讨论】:

  • 你所拥有的图表的表示形式是什么?图是面向的吗?
  • @svick 它是定向的。如果有向的定义是不能有任何边a->b和b->a,那么是的,它也是有向的。

标签: algorithm graph


【解决方案1】:

我认为 BFS 遍历是最有效的算法。

如果你做一个 BFS 并将每个节点的 所有 个邻居排入队列(即遍历连接到当前节点的所有边),并且仅当 当前节点 有已经被访问过,你避免了你用“同一个孩子”/“错过的边缘”描述的问题。

【讨论】:

  • 我不明白为什么 BFS 比 DFS 更有效。它们看起来是等价的。但我确实明白你的建议。谢谢。
【解决方案2】:

一种“快速”算法,它枚举所有的诱导子图 给定的尺寸可以在这里找到:

http://theinf1.informatik.uni-jena.de/~wernicke/motifs-wabi2005.pdf

这有帮助吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 2017-07-04
    相关资源
    最近更新 更多