Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void Graph::strongly_connected_components()
- {
- stack<int> finalization;
- Graph G_transpose;
- for (int i = 0; i < vertices_number; ++i)
- {
- if (colors[i] == 0)
- DFS_visit_SCC(i, finalization);
- }
- for (int i = 0; i < vertices_number; ++i)
- G_transpose.add_vertex();
- for (int i = 0; i < vertices_number; ++i)
- for (auto v : adj_lists[i])
- G_transpose.add_edge(v, i);
- while (!finalization.empty())
- {
- int v = finalization.top();
- finalization.pop();
- if (G_transpose.colors[v] == 0)
- {
- G_transpose.DFS_visit_SCC_transpose(v);
- cout << endl;
- }
- }
- }
- void Graph::DFS_visit_SCC(int vertex, stack<int>& finalization)
- {
- colors[vertex] = 1;
- for (auto neighbour : adj_lists[vertex])
- {
- if (colors[neighbour] == 0)
- {
- DFS_visit_SCC(neighbour, finalization);
- }
- }
- finalization.push(vertex);
- }
- void Graph::DFS_visit_SCC_transpose(int vertex)
- {
- cout << vertex << " ";
- colors[vertex] = 1;
- for (auto neighbour : adj_lists[vertex])
- {
- if (colors[neighbour] == 0)
- {
- DFS_visit_SCC_transpose(neighbour);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement