我在该图中有一个有向无环图和一个原点顶点v.
如何访问v中可以访问的所有顶点,这样如果我访问v1,我已经访问了所有具有和边缘到v1的顶点?
例:
/-----V
A->B->C
从A开始,必须在B之后访问C.
我试着做一个BFS并检查每个顶点的父节点,如果它们没有被访问,请重新添加它以供日后使用,但事实证明它太慢了,我相信可以是O(v ^ 2).
知道图形有点二进制可能会有所帮助,每个顶点最多会指向两个顶点.在另一个方向上,每个顶点指向许多顶点.
最佳答案 你可能正在寻找
topological sort.
首先,进行拓扑排序,然后根据这种排序得到图中顶点的顺序,让它为v1,v2,…,vn.
使用BFS,您只能保留可从v到达的顶点(过滤掉其他顶点),并按拓扑排序的顺序迭代它们.
这是O(| V | | E |),在你的情况下是O(| V |)(最多两个顶点将指向每个顶点的松弛建议| E |< = 2 | V |,因此O(| V | | E |)< = O | V | 2 | V |)= O(3 | V |)= O(| V |)