走有向图

Walking a directed graph

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

示例:

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

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

了解该图在某种程度上是二进制的可能会有所帮助,每个顶点最多由两个顶点指向。在另一个方向上,每个顶点指向很多顶点。

您可能正在寻找 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|)