我在该图中有一个有向无环图和一个原点顶点v
如何访问v
可以访问的所有顶点,如果我访问v1
我已经访问了所有顶点并且边缘为v1
?
示例:
/-----V
A->B->C
从A
开始,C
之后必须访问B
我试着做一个BFS并检查每个顶点的父节点,如果没有访问它们,请重新添加它以供日后使用,但事实证明它太慢了,我相信可以O(v^2)
。
可能有助于知道图形有点二进制,每个顶点最多会指向两个顶点。在另一个方向上,每个顶点指向许多顶点。
答案 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|)