【问题标题】:Walking a directed graph走有向图
【发布时间】:2015-10-24 22:36:25
【问题描述】:

我在该图中有一个有向无环图和一个原点v
我怎样才能访问从v 可以到达的所有顶点,这样如果我访问v1 我已经访问了所有具有v1 边缘的顶点?

例子:

/-----V
A->B->C

A开始,C必须在B之后访问。
我试着做一个 BFS 并检查每个顶点的父节点,如果他们没有被访问过,则重新添加它以备后用,但事实证明这太慢了,我相信可以是 O(v^2)

知道图有点二元可能会有所帮助,每个顶点最多将由两个顶点指向。在另一个方向上,每个顶点都指向很多顶点。

【问题讨论】:

  • @JonathonReinhart 不,算法问题完全符合主题。 example1example2example3。它们可以翻译成任何语言,并直接连接到软件问题。 OP 也努力自己解决这个问题。
  • @amit 我觉得 Stack Overflow(“软件算法”)、计算机科学(“算法、计算模型”)和程序员的主题之间有很多重叠之处(“算法和数据结构概念”),都引用自他们的“主题”页面。在我看来,如果您不能用编程语言(例如 C)或环境(例如 POSIX)标记问题,那么它更适合其他网站。无需编写任何代码(“编程”)即可回答和证明这个问题。我撤回了对先例的投票,但我不同意。
  • @JonathonReinhart 有一个标签有 7k 个问题,language-agnostic,被认为是主题。我的示例中的所有问题都与任何特定的编程语言无关,但与编程非常相关,并且受到社区的喜爱,所以我真的不同意你的观点。
  • @JonathonReinhart 我们程序员用户喜欢链接每个人的规范元帖子是 meta.programmers.stackexchange.com/questions/7182/… 就我个人而言,我的直觉是这个问题是 SO 和 P.SE 的主题。
  • 这个问题在许多 Stack Exchange 网站上都很好,包括 Stack Overflow。它不应该被迁移。

标签: algorithm graph directed-graph


【解决方案1】:

您可能正在寻找topological sort

首先做一个拓扑排序,按照这个排序得到图中顶点的顺序,设为v1,v2,...,vn

使用 BFS,您可以只留下可以从 v 到达的顶点(过滤掉其他顶点),并按照拓扑排序的顺序对其进行迭代。

这是O(|V|+|E|),在你的情况下是O(|V|)(放松each vertex will be pointed to by at most two vertices建议|E| <= 2|V|,因此O(|V|+|E|) <= O|V|+2|V|) = O(3|V|) = O(|V|)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-03
    • 1970-01-01
    • 2021-06-09
    • 1970-01-01
    • 2017-08-18
    • 2023-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多