public DepthFirstOrder(Digraph g) { pre = new Queue <int>(); post = new Queue <int>(); reversePost = new Stack <int>(); marked = new bool[g.V]; for (int v = 0; v < g.V; v++) { if (!marked[v]) { DFS(g, v); } } }
/** * Returns the reverse of the digraph. * * @return the reverse of the digraph */ public Digraph <T> reverse() { Digraph <T> reverse = new Digraph <T>(); foreach (T v in Vertices) { object nv = v.Clone(); } foreach (T v in Vertices) { foreach (T s in Successors(v)) { reverse.AddEdge(new DirectedEdge <T>(s, v)); } } return(reverse); }
/** * Returns the reverse of the digraph. * * @return the reverse of the digraph */ public Digraph <T> reverse() { Digraph <T> reverse = new Digraph <T>(); foreach (var v in this.Vertices) { var nv = v.Clone(); } foreach (var v in this.Vertices) { foreach (var s in this.Successors(v)) { reverse.AddEdge(new DirectedEdge <T>(s, v)); } } return(reverse); }
public DirectedDFS(Digraph g, int s) { marked = new bool[g.V]; DFS(g, s); }
/** * Unit tests the {@code DepthFirstOrder} data type. * * @param args the command-line arguments */ public static void test() { string tiny = $@" 13 22 4 2 2 3 3 2 6 0 0 1 2 0 11 12 12 9 9 10 9 11 7 9 10 12 11 4 4 3 3 5 6 8 8 6 5 4 0 5 6 4 6 9 7 6 "; Digraph <IntWrapper> G = new Digraph <IntWrapper>(tiny, (string s) => new IntWrapper(int.Parse(s))); System.Console.Error.WriteLine(G); DepthFirstOrder <IntWrapper, DirectedEdge <IntWrapper> > dfs = new DepthFirstOrder <IntWrapper, DirectedEdge <IntWrapper> >(G); System.Console.WriteLine(" v pre post"); System.Console.WriteLine("--------------"); foreach (var v in G.Vertices) { System.Console.Write("{0} {1} {2}\n", v, dfs.Pre(v), dfs.Post(v)); } System.Console.Write("Preorder: "); foreach (IntWrapper v in dfs.Pre()) { System.Console.Write(v + " "); } System.Console.WriteLine(); System.Console.Write("Postorder: "); foreach (IntWrapper v in dfs.Post()) { System.Console.Write(v + " "); } System.Console.WriteLine(); System.Console.Write("Reverse postorder: "); foreach (IntWrapper v in dfs.reversePost()) { System.Console.Write(v + " "); } System.Console.WriteLine(); }