コード例 #1
0
        //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);
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
        /// <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);
        }
コード例 #4
0
        /// <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);
        }
コード例 #5
0
        /// <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);
        }
コード例 #6
0
        /// <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);
        }
コード例 #7
0
        /// <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);
        }
コード例 #8
0
        /// <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);
        }