示例#1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="startNode"></param>
        /// <param name="way"></param>
        /// <returns></returns>
        private List <int> SearchTheGraph(Node startNode, WayOfSearch way)
        {
            if (startNode == null)
            {
                throw new ArgumentNullException();
            }
            if (ContainsNode(startNode) == false)
            {
                throw new KeyNotFoundException();
            }

            int        nodeNumber = startNode.NodeNumber;
            List <int> closed     = new List <int>();
            List <int> open       = new List <int>();

            open.Insert(0, nodeNumber);

            while (open.Count > 0)
            {
                int temp = open[0];
                open.RemoveAt(0);
                closed.Add(temp);
                SortedList <int, Node> neighbor = this.NearOfNodeDirected(new Node(temp));//verify

                foreach (int number in neighbor.Keys)
                {
                    if ((!closed.Contains(number)) && (!open.Contains(number)))
                    {
                        switch (way)
                        {
                        case WayOfSearch.BreadthFirst:
                            open.Add(number);
                            break;

                        case WayOfSearch.DepthFirst:
                            open.Insert(0, number);     // add at the front of the open List
                            break;
                        }
                    }
                }
            }

            return(closed);
        }
示例#2
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="startNode"></param>
        /// <param name="way"></param>
        /// <returns></returns>
        private List<int> SearchTheGraph(Node startNode, WayOfSearch way)
        {
            if (startNode == null)
            {
                throw new ArgumentNullException();
            }
            if (ContainsNode(startNode) == false)
            {
                throw new KeyNotFoundException();
            }

            int nodeNumber = startNode.NodeNumber;
            List<int> closed = new List<int>();
            List<int> open = new List<int>();
            open.Insert(0, nodeNumber);

            while (open.Count > 0)
            {
                int temp = open[0];
                open.RemoveAt(0);
                closed.Add(temp);
                SortedList<int, Node> neighbor = this.NearOfNodeDirected(new Node(temp));//verify

                foreach (int number in neighbor.Keys)
                {
                    if ((!closed.Contains(number)) && (!open.Contains(number)))
                    {
                        switch (way)
                        {
                            case WayOfSearch.BreadthFirst:
                                open.Add(number);
                                break;

                            case WayOfSearch.DepthFirst:                                
                                open.Insert(0, number); // add at the front of the open List
                                break;
                        }
                    }
                }
            }

            return closed;
        }