/** * 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) //{ // _ = v.Clone(); //} foreach (T v in Vertices) { foreach (T s in Successors(v)) { reverse.AddEdge(new DirectedEdge <T>(s, v)); } } return(reverse); }
private static void GraphFindAllPaths() { var graph = new Digraph(); graph.AddEdge(0, 1); graph.AddEdge(0, 2); graph.AddEdge(0, 3); graph.AddEdge(2, 0); graph.AddEdge(2, 1); graph.AddEdge(1, 3); var results = graph.FindAllPaths(2, 3); foreach (var path in results) { Console.WriteLine(string.Join(",", path)); } }
private static void TestGraph() { var graph = new Digraph(); /*graph.AddEdge(5, 2); * graph.AddEdge(5, 0); * graph.AddEdge(4, 0); * graph.AddEdge(4, 1); * graph.AddEdge(2, 3); * graph.AddEdge(3, 1); * * var stack = graph.TopologicalSort(); * * while (stack.Count > 0) * { * Console.Write(stack.Pop() + " "); * }*/ graph.AddEdge(0, 1); graph.AddEdge(0, 2); graph.AddEdge(1, 2); graph.AddEdge(2, 0); graph.AddEdge(2, 3); graph.AddEdge(3, 3); var result = graph.TransitiveClosure(); for (var i = 0; i < result.GetLength(0); i++) { for (var j = 0; j < result.GetLength(1); j++) { Console.Write(result[i, j] + " "); } Console.WriteLine(); } }
/** * 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 (IntWrapper 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(); }