public KosarajuAlgorithm(DGraph G) { TopologicalSorting Gts = new TopologicalSorting(G); DGraph Gtr = G.Transposition(); int[] mark = new int[G.VerticesCount]; for (int i = 0; i < G.VerticesCount; ++i) mark[i] = -1; SCCEdg = new List<List<DEdge>>(); SCCVrt = new List<List<int>>(); for (int i = Gtr.VerticesCount - 1; i >= 0; --i) if (mark[Gts[i]] == -1) { List<DEdge> tscce = new List<DEdge>(); SCCEdg.Add(tscce); List<int> tsccv = new List<int>(); SCCVrt.Add(tsccv); AddSCC(Gts[i], ref mark, Gtr); SCCVrt[SCCCount].Sort(); ++SCCCount; } }
public KosarajuAlgorithm(DGraph G) { TopologicalSorting Gts = new TopologicalSorting(G); DGraph Gtr = G.Transposition(); int[] mark = new int[G.VerticesCount]; for (int i = 0; i < G.VerticesCount; ++i) { mark[i] = -1; } SCCEdg = new List <List <DEdge> >(); SCCVrt = new List <List <int> >(); for (int i = Gtr.VerticesCount - 1; i >= 0; --i) { if (mark[Gts[i]] == -1) { List <DEdge> tscce = new List <DEdge>(); SCCEdg.Add(tscce); List <int> tsccv = new List <int>(); SCCVrt.Add(tsccv); AddSCC(Gts[i], ref mark, Gtr); SCCVrt[SCCCount].Sort(); ++SCCCount; } } }
private void BuildStrongConnectedComponents(DirectedGraph Graph) { TopologicalSorting topologicalSortedVertices = new TopologicalSorting(Graph); DirectedGraph transposedGraph = Graph.Transposition(); int[] mark = new int[Graph.VerticesCount]; for (int i = 0; i < Graph.VerticesCount; ++i) { mark[i] = -1; } for (int i = transposedGraph.VerticesCount - 1; i >= 0; --i) { if (mark[topologicalSortedVertices[i]] == -1) { List <DirectedEdge> edges = new List <DirectedEdge>(); _strongConnectedComponentEdges.Add(edges); List <int> vertices = new List <int>(); _strongConnectedComponentVertices.Add(vertices); AddStrongConnectedComponent(topologicalSortedVertices[i], mark, transposedGraph); _strongConnectedComponentVertices[StrongConnectedComponentCount].Sort(); ++StrongConnectedComponentCount; } } }
private void BuildStrongConnectedComponents(DirectedGraph Graph) { TopologicalSorting topologicalSortedVertices = new TopologicalSorting(Graph); DirectedGraph transposedGraph = Graph.Transposition(); int[] mark = new int[Graph.VerticesCount]; for (int i = 0; i < Graph.VerticesCount; ++i) mark[i] = -1; for (int i = transposedGraph.VerticesCount - 1; i >= 0; --i) if (mark[topologicalSortedVertices[i]] == -1) { List<DirectedEdge> edges = new List<DirectedEdge>(); _strongConnectedComponentEdges.Add(edges); List<int> vertices = new List<int>(); _strongConnectedComponentVertices.Add(vertices); AddStrongConnectedComponent(topologicalSortedVertices[i], mark, transposedGraph); _strongConnectedComponentVertices[StrongConnectedComponentCount].Sort(); ++StrongConnectedComponentCount; } }