Beispiel #1
0
        public static List <List <TNode> > GetStronglyConnectedComponents <TNode, TWeight>(AdjacencyList <TNode, TWeight> graph)
            where TWeight : IComparable
        {
            DepthFirstSearch <TNode, TWeight> dfs = new DepthFirstSearch <TNode, TWeight>(graph, graph[0]);

            AdjacencyList <TNode, TWeight> transpose = graph.Transpose();

            List <TNode> nodeOrder = dfs.GetSortedNodes(SortType.BasedOnFinishTime);

            nodeOrder.Reverse();

            DepthFirstSearch <TNode, TWeight> tempResult = new DepthFirstSearch <TNode, TWeight>(transpose, nodeOrder);

            //List<AdjacencyList<TNode, TWeight>> result = new List<AdjacencyList<TNode, TWeight>>();

            List <TNode> nodeOrder2 = tempResult.GetSortedNodes(SortType.BasedOnFinishTime);

            return(tempResult.GetComponents());
        }