走一个有向图

时间:2015-08-02 21:31:20

标签: algorithm graph directed-graph

我在该图中有一个有向无环图和一个原点顶点v 如何访问v可以访问的所有顶点,如果我访问v1我已经访问了所有顶点并且边缘为v1

示例:

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

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

可能有助于知道图形有点二进制,每个顶点最多会指向两个顶点。在另一个方向上,每个顶点指向许多顶点。

1 个答案:

答案 0 :(得分: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|)