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()); }