输出有向图中存在的循环中的节点
虽然我知道我们可以通过检测后沿来使用 DFS 算法来检测循环 http:// /cs.wellesley.edu/~cs231/fall01/dfs.pdf。我无法弄清楚如何在遵循上述方法的同时以高效且“干净”的方式输出循环中的节点。
如果您能提供一些帮助,我们将不胜感激
,谢谢
While I understand that we can detect cycles with the DFS algorithm by detecting back-edges http://cs.wellesley.edu/~cs231/fall01/dfs.pdf. I am not being able to figure out how to output the nodes in the cycle in an efficient and "clean" manner while following the above said method.
Would be gratfeull for some help
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这就是我在自己的实现中所做的。它的命名约定与 PDF 中使用的命名约定略有不同,但它的作用应该很明显。
所有
m_*
变量都是向量,除了m_topoOrder
和m_cycle
是堆栈。循环的节点将在
m_cycle
中。m_onStack
跟踪递归调用堆栈上的节点。对于完整的描述,我建议阅读 Robert Sedgewick 所著的《算法》一书。
This is how i did it in my own implementation. It deviates a little bit in the naming conventions from the one used in your PDF but it should be obvious what it does.
All
m_*
variables are vectors, exceptm_topoOrder
andm_cycle
which are stacks.The nodes of the cycle will be in
m_cycle
.The
m_onStack
keeps track of nodes which are on the recursive call stack.For a complete description i suggest the book Algorithms by Robert Sedgewick.