Advertisement
Guest User

Untitled

a guest
Apr 19th, 2019
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.08 KB | None | 0 0
  1. void Graph::strongly_connected_components()
  2. {
  3. stack<int> finalization;
  4. Graph G_transpose;
  5.  
  6. for (int i = 0; i < vertices_number; ++i)
  7. {
  8. if (colors[i] == 0)
  9. DFS_visit_SCC(i, finalization);
  10. }
  11.  
  12. for (int i = 0; i < vertices_number; ++i)
  13. G_transpose.add_vertex();
  14.  
  15. for (int i = 0; i < vertices_number; ++i)
  16. for (auto v : adj_lists[i])
  17. G_transpose.add_edge(v, i);
  18.  
  19. while (!finalization.empty())
  20. {
  21. int v = finalization.top();
  22. finalization.pop();
  23.  
  24. if (G_transpose.colors[v] == 0)
  25. {
  26. G_transpose.DFS_visit_SCC_transpose(v);
  27. cout << endl;
  28. }
  29. }
  30. }
  31.  
  32. void Graph::DFS_visit_SCC(int vertex, stack<int>& finalization)
  33. {
  34. colors[vertex] = 1;
  35.  
  36. for (auto neighbour : adj_lists[vertex])
  37. {
  38. if (colors[neighbour] == 0)
  39. {
  40. DFS_visit_SCC(neighbour, finalization);
  41. }
  42. }
  43.  
  44. finalization.push(vertex);
  45. }
  46.  
  47. void Graph::DFS_visit_SCC_transpose(int vertex)
  48. {
  49. cout << vertex << " ";
  50. colors[vertex] = 1;
  51.  
  52. for (auto neighbour : adj_lists[vertex])
  53. {
  54. if (colors[neighbour] == 0)
  55. {
  56. DFS_visit_SCC_transpose(neighbour);
  57. }
  58. }
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement