//Takes in a root node and returns a collection of all the nodes visited in order public IEnumerable <Node> BreadthFirst(Node root) { List <Node> order = new List <Node>(); Queue <Node> breadth = new Queue <Node>(); breadth.Enqueue(root); root.Visited = true; while (breadth.TryPeek(out root)) { Node front = breadth.Dequeue(); order.Add(front); foreach (Node neighbor in front.Neighbors) { if (!neighbor.Visited) { neighbor.Visited = true; breadth.Enqueue(neighbor); } } } return(order); }
/// <summary> /// Takes in a node and traverses through the entire graph /// </summary> /// <param name="node"></param> /// <returns>List of all the nodes in the graph</returns> public List <Node> BreadthFirst(Node node) { List <Node> order = new List <Node>(); Queue <Node> breadth = new Queue <Node>(); breadth.Enqueue(node); while (breadth.TryPeek(out node)) { Node front = breadth.Dequeue(); front.Visited = false; order.Add(front); //the Visited bool value was switched to all true in GetNodes(), //so this logic is the opposite to compensate for that switch foreach (Node child in front.Edges) { if (child.Visited) { child.Visited = false; breadth.Enqueue(child); } } } return(order); }
/// <summary> /// traverse a graph /// </summary> /// <param name="root">starting point</param> /// <returns>list of nodes in the graph</returns> public List <Node> BreadthFirst(Node root) { List <Node> order = new List <Node>(); Queue <Node> breadth = new Queue <Node>(); breadth.Enqueue(root); //placement could be wrong root.Visited = true; while (breadth.TryPeek(out root)) { Node front = breadth.Dequeue(); order.Add(front); foreach (Node child in front.Children) { if (!child.Visited) { child.Visited = true; breadth.Enqueue(child); } } } foreach (var node in order) { node.Visited = false; } return(order); }
/// <summary> /// method to get all nodes /// </summary> /// <param name="node">root node to execute request from</param> /// <returns>list of nodes gotten</returns> public List <Node> GetNodes(Node root) { List <Node> order = new List <Node>(); Queue <Node> breadth = new Queue <Node>(); breadth.Enqueue(root); while (breadth.TryPeek(out root)) { Node front = breadth.Dequeue(); order.Add(front); front.Visited = true; foreach (Node child in front.Neighbor) { if (!child.Visited) { child.Visited = true; breadth.Enqueue(child); } } } //print list foreach (var item in order) { Console.WriteLine(item.Value); } return(order); }
/// <summary> /// Takes in a root node, and returns a collection of all the nodes visited in order /// </summary> /// <param name="root"></param> /// <returns></returns> public List <Node> BreadthFirst(Node source) { //creates list called order. List <Node> order = new List <Node>(); //new queue called bread Queue <Node> bread = new Queue <Node>(); bread.Enqueue(source); while (bread.TryPeek(out source)) { //check the front node and dequeue from the bread queue Node front = bread.Dequeue(); //and add node to the front of the list called order order.Add(front); //iterate through the front of the edges into child node foreach (Node child in front.Edges) { //if child is visited, then change value to false and enqueue the child if (child.Visited) { child.Visited = false; bread.Enqueue(child); } } } return(order); }
/// <summary> /// returns all nodes as collection called order /// </summary> /// <returns></returns> public List <Node> GetNodes(Node node) { //creating list of nodes List <Node> order = new List <Node>(); //queueing up nodes in new queue Queue <Node> bread = new Queue <Node>(); //enqueueing nodes via the queue bread.Enqueue(node); //while loop to go through the entire graph. first through the peek and pushing out a node while (bread.TryPeek(out node)) { //front node will dequeue Node front = bread.Dequeue(); //the list order, will add the node to the front order.Add(front); //iterate through the first edge with node variable, child foreach (Node child in front.Edges) { //if the child has not been visited, change it to true and enqueue the node into child if (!child.Visited) { child.Visited = true; bread.Enqueue(child); } } } return(order); }
/// <summary> /// Gets all nodes in the graph /// </summary> /// <param name="node"></param> /// <returns>List of nodes</returns> public List <Node> GetNodes(Node node) { List <Node> order = new List <Node>(); Queue <Node> breadth = new Queue <Node>(); breadth.Enqueue(node); while (breadth.TryPeek(out node)) { Node front = breadth.Dequeue(); front.Visited = true; order.Add(front); foreach (Node child in front.Edges) { if (!child.Visited) { child.Visited = true; breadth.Enqueue(child); } } } return(order); }
/// <summary> /// traverses graph by placing vertices in queue and then in a list after dequeuing /// </summary> /// <param name="root">root node</param> /// <returns> list of all nodes</returns> public List <Node> BreadthFirst(Node root) { List <Node> order = new List <Node>(); Queue <Node> breadth = new Queue <Node>(); root.Visited = true; breadth.Enqueue(root); while (breadth.TryPeek(out root)) { Node front = breadth.Dequeue(); order.Add(front); foreach (Node child in front.Children) { if (!child.Visited) { child.Visited = true; breadth.Enqueue(child); } } } return(order); }