当前位置:   article > 正文

有向图(3)--寻找有向环_有向图找环

有向图找环

在和有向图相关的实际应用中,有向环特别重要。

从原则上来说,一幅有向图可能含有大量的环,在实际应用中,我们一般只会重点关注其中一小部分,或者只想知道它们是否存在。

思路:一旦我们找到了一条有向边v->w且w已经存在于栈中,就找到了一个环,因为栈表示的是一条由w到v的有向路径,而v->w正好补全了这个环。同时,如果没有找到这样的边,那就意味着这幅有向图是无环的。

  1. #ifndef __DIRECTED_CYCLE_H__
  2. #define __DIRECTED_CYCLE_H__
  3. #include "Digraph.h"
  4. #include <stack>
  5. class DirectedCycle {
  6. private:
  7. bool* marked;
  8. int* edgeTo;
  9. std::stack<int> cycle; // 有向环中的所有顶点(如果存在)
  10. bool* onStack; // 递归调用的栈上的所有顶点
  11. public:
  12. DirectedCycle(const Digraph& G);
  13. ~DirectedCycle() { delete[] marked; delete[] edgeTo; delete[] onStack; }
  14. bool hasCycle()const { return !cycle.empty(); }
  15. std::stack<int> getCycle()const { return cycle; }
  16. private:
  17. void dfs(const Digraph& G, int v);
  18. };
  19. // constructor
  20. DirectedCycle::DirectedCycle(const Digraph& G) {
  21. int vNum = G.getV();
  22. marked = new bool[vNum];
  23. onStac
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/64559
推荐阅读
相关标签
  

闽ICP备14008679号