public static bool BFStoFindPath(graphnode source, graphnode dest) { List <int> res = new List <int>(); if (source == null) { return(false); } Queue <graphnode> q = new Queue <graphnode>(); res.Add(source.value); source.visited = true; q.Enqueue(source); while (q.Count != 0) { graphnode cur = q.Dequeue(); if (cur == dest) { return(true); } cur.visited = true; foreach (graphnode n in cur.children) { if (!n.visited) { q.Enqueue(n); } } } return(false); }
static void Main(string[] args) { graph g = new graph(); graphnode node5 = new graphnode(5); graphnode node4 = new graphnode(4); graphnode node2 = new graphnode(2); graphnode node0 = new graphnode(0); graphnode node1 = new graphnode(1); graphnode node3 = new graphnode(3); g.graphnodelist = new List <graphnode> { node5, node4, node2, node0, node1, node3 }; g.addDirectedEdge(node5, node2); g.addDirectedEdge(node5, node0); g.addDirectedEdge(node4, node0); g.addDirectedEdge(node4, node1); g.addDirectedEdge(node2, node3); g.addDirectedEdge(node3, node1); bool res = FindPathBetweenTwoGraphNode(node5, node1); graph.resetGraphnodevistedboolean(g); bool res2 = FindPathBetweenTwoGraphNode(node2, node1); graph.resetGraphnodevistedboolean(g); bool res3 = FindPathBetweenTwoGraphNode(node5, node4); }
static void Main(string[] args) { graph g = new graph(); graphnode node5 = new graphnode(5); graphnode node4 = new graphnode(4); graphnode node2 = new graphnode(2); graphnode node0 = new graphnode(0); graphnode node1 = new graphnode(1); graphnode node3 = new graphnode(3); g.graphnodelist = new List <graphnode> { node5, node4, node2, node0, node1, node3 }; g.addDirectedEdge(node5, node2); g.addDirectedEdge(node5, node0); g.addDirectedEdge(node4, node0); g.addDirectedEdge(node4, node1); g.addDirectedEdge(node2, node3); g.addDirectedEdge(node3, node1); Stack <int> s = new Stack <int>(); topologicalSort(g, ref s); Console.WriteLine(s.ToList()); }
private static void topologicalSortHelper(graphnode node, ref Stack <int> stack) { foreach (graphnode n in node.children) { if (!n.visited) { topologicalSortHelper(n, ref stack); } } stack.Push(node.value); node.visited = true; }
private static bool FindPathBetweenTwoGraphNode(graphnode node1, graphnode node2) { return(BFStoFindPath(node1, node2)); }