public Digraph Reverse() { Digraph d = new Digraph(_vertices); for (int v = 0; v < _adjs.Length; v++) { foreach (int w in _adjs[v]) { d.AddEdge(w, v); } } return(d); }
static void Main(string[] args) { Digraph g = new Digraph(9); //g.Visualize() g.AddEdge(0, 2); g.AddEdge(0, 6); g.AddEdge(1, 0); g.AddEdge(2, 3); g.AddEdge(2, 4); g.AddEdge(3, 4); g.AddEdge(3, 2); g.AddEdge(4, 5); g.AddEdge(4, 6); g.AddEdge(5, 0); g.AddEdge(5, 3); g.AddEdge(6, 7); g.AddEdge(7, 8); g.AddEdge(8, 7); var topo = new Topological(g); Console.WriteLine("Order: "); foreach (int s in topo.Order) { Console.Write(s + " "); } Console.WriteLine("\nReverOrder: "); DepthFirstOrder order = new DepthFirstOrder(g.Reverse()); foreach (int s in order.Reverse) { Console.Write(s + " "); } KosarajuSCC ks = new KosarajuSCC(g); Console.WriteLine($"\nks:{ks.Count()}"); }