我需要找到一种在O(n+m)时间内寻找有向图中所有根的算法。
我已经有了一种寻找单个根的算法:
1. 在V中的某个v上运行DFS(v)。如果结果是一个生成树,则v是一个根。否则,结果是一组树,然后: 2. 在最后一棵树的根上运行DFS(u)。如果结果是一个生成树,则u是一个根。否则,图中没有根。
现在,如果我想找到所有的根,最好的方法是仅在最后一棵树上的不同顶点上运行上述算法n次吗?假设我找到一个根,如果还存在其他根,则它必须在最后一棵树上,那么如果我继续运行上述算法直到收到“没有根存在”或者遍历所有顶点,那么复杂度是否为O(n+m)?
谢谢!
我已经有了一种寻找单个根的算法:
1. 在V中的某个v上运行DFS(v)。如果结果是一个生成树,则v是一个根。否则,结果是一组树,然后: 2. 在最后一棵树的根上运行DFS(u)。如果结果是一个生成树,则u是一个根。否则,图中没有根。
现在,如果我想找到所有的根,最好的方法是仅在最后一棵树上的不同顶点上运行上述算法n次吗?假设我找到一个根,如果还存在其他根,则它必须在最后一棵树上,那么如果我继续运行上述算法直到收到“没有根存在”或者遍历所有顶点,那么复杂度是否为O(n+m)?
谢谢!