当前位置:   article > 正文

判断图中是否有环_c语言如何判断图是否有环

c语言如何判断图是否有环

 来自:判断图中是否有环的三种方法_J先生的编程笔记的博客-CSDN博客_判断图中是否有环

有向图,自己的代码:

  1. #include<iostream>
  2. #include<algorithm>
  3. #include<cstring>
  4. #include<queue>
  5. using namespace std;
  6. int e[100010],h[1000010],ne[1000010],idx;
  7. int rd[100010];
  8. int n, m;
  9. int sum = 0;
  10. bool st[1000010];
  11. void add(int a, int b)
  12. {
  13. e[idx] = b;
  14. ne[idx] = h[a];
  15. h[a] = idx ++ ;
  16. }
  17. bool topsort()
  18. {
  19. queue<int> q;
  20. for(int i = 1;i <= n;i ++ )
  21. {
  22. if(!st[i])
  23. {
  24. if(rd[i] == 0)
  25. {
  26. q.push(i);
  27. sum = sum + 1;
  28. st[i] = true;
  29. }
  30. }
  31. }
  32. while(!q.empty())
  33. {
  34. int t = q.front();
  35. for(int i = h[t]; ~ i ;i = ne[i])
  36. {
  37. int j = e[i];
  38. if(st[j] == true) continue;
  39. rd[j] = rd[j] - 1;
  40. if(rd[j] == 0)
  41. {
  42. q.push(j);
  43. st[j] = true;
  44. sum = sum + 1;
  45. }
  46. }
  47. q.pop();
  48. }
  49. if(sum == n) return false;
  50. else return true;
  51. }
  52. int main()
  53. {
  54. cin >> n >> m;
  55. memset(h, -1, sizeof h);
  56. while(m -- )
  57. {
  58. int x, y;
  59. cin >> x >> y;
  60. add(x, y);
  61. rd[y] = rd[y] + 1;
  62. }
  63. if(topsort())
  64. cout << "Yes" << endl;
  65. else
  66. cout << "No" << endl;
  67. return 0;
  68. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/64532
推荐阅读
相关标签
  

闽ICP备14008679号