示例#1
0
        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;
                }
        }
示例#2
0
        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;
                }
            }
        }
示例#3
0
        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;
                }
            }
        }
示例#4
0
        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;
                }
        }