private static void AddFilterToEdge <T>(Graph <T> G) where T : IComparable <T> { DFS <T> dfs = new DFS <T>(G); dfs.EdgeTraversed += new EventHandler <EdgeEventArgs <T> >(GraphEventFunctions.AddFilterToEdge <T>); dfs.Compute(); }
private static void DisplayEdgeProperties <T>(Graph <T> graph) where T : IComparable <T> { DFS <T> dfs = new DFS <T>(graph); dfs.EdgeTraversed += new EventHandler <EdgeEventArgs <T> >(GraphEventFunctions.DisplayEdgeProperties); dfs.Compute(); }
private void TestDfs(Graph <char> G) { DFS <char> dfs = new DFS <char>(G); dfs.NodeEntered += new EventHandler <NodeEventArgs <char> >(GraphNodeFuncs.DisplayEnteredNode <char>); dfs.NodeDiscovered += new EventHandler <NodeEventArgs <char> >(GraphNodeFuncs.DisplayDiscoveredNode <char>); dfs.NodeExited += new EventHandler <NodeEventArgs <char> >(GraphNodeFuncs.DisplayExitedNode <char>); dfs.Compute(); IList <DFSNodeData <char> > results = dfs.Results; foreach (DFSNodeData <char> datum in results) { Console.WriteLine(datum); } }
private static void TestDfs <T>(Graph <T> G) where T : IComparable <T> { TopoSort <T> topoSort = new TopoSort <T>(); DFS <T> dfs = new DFS <T>(G); //dfs.NodeEntered += new EventHandler<NodeEventArgs<T>>(GraphEventFunctions.DisplayEnteredNode<T>); //dfs.NodeDiscovered += new EventHandler<NodeEventArgs<T>>(GraphEventFunctions.DisplayDiscoveredNode<T>); dfs.NodeExited += new EventHandler <NodeEventArgs <T> >(GraphEventFunctions.DisplayExitedNode <T>); dfs.NodeExited += new EventHandler <NodeEventArgs <T> >(topoSort.AddNode); dfs.EdgeDiscovered += new EventHandler <EdgeEventArgs <T> >(GraphEventFunctions.DisplayDiscoveredEdge <T>); dfs.EdgeTraversed += new EventHandler <EdgeEventArgs <T> >(GraphEventFunctions.DisplayTraversedEdge <T>); dfs.Compute(); dfs.Graph.ForEachNode(PrintDFSNodeData <T>); Console.WriteLine("TopoSort..."); foreach (INode <T> node in topoSort.TopoList) { Console.WriteLine("Node {0}", node); } }
public void StartTraversalAtSpecificNode() { List <char> nodeFindOrder = new List <char>(); List <IEdge <char> > edgeFindOrder = new List <IEdge <char> >(); DFS <char> search = new DFS <char>(graph); search.SetStartNode('v'); search.NodeDiscovered += (sender, e) => nodeFindOrder.Add(e.Node); search.EdgeDiscovered += (sender, e) => edgeFindOrder.Add(e.Edge); search.Compute(); Assert.AreEqual('v', nodeFindOrder[0]); Assert.AreEqual('r', nodeFindOrder[1]); Assert.AreEqual('s', nodeFindOrder[2]); Assert.AreEqual('w', nodeFindOrder[3]); Assert.AreEqual('t', nodeFindOrder[4]); Assert.AreEqual('x', nodeFindOrder[5]); Assert.AreEqual('y', nodeFindOrder[6]); Assert.AreEqual('u', nodeFindOrder[7]); Assert.AreEqual("(v,r)", edgeFindOrder[0].ToString()); Assert.AreEqual("(r,s)", edgeFindOrder[1].ToString()); Assert.AreEqual("(s,r)", edgeFindOrder[2].ToString()); Assert.AreEqual("(s,w)", edgeFindOrder[3].ToString()); Assert.AreEqual("(w,s)", edgeFindOrder[4].ToString()); Assert.AreEqual("(w,t)", edgeFindOrder[5].ToString()); Assert.AreEqual("(t,w)", edgeFindOrder[6].ToString()); Assert.AreEqual("(t,x)", edgeFindOrder[7].ToString()); Assert.AreEqual("(x,w)", edgeFindOrder[8].ToString()); Assert.AreEqual("(x,t)", edgeFindOrder[9].ToString()); Assert.AreEqual("(x,y)", edgeFindOrder[10].ToString()); Assert.AreEqual("(y,x)", edgeFindOrder[11].ToString()); Assert.AreEqual("(y,u)", edgeFindOrder[12].ToString()); Assert.AreEqual("(u,t)", edgeFindOrder[13].ToString()); Assert.AreEqual("(u,y)", edgeFindOrder[14].ToString()); Assert.AreEqual("(t,u)", edgeFindOrder[15].ToString()); Assert.AreEqual("(w,x)", edgeFindOrder[16].ToString()); Assert.AreEqual("(r,v)", edgeFindOrder[17].ToString()); }