示例#1
0
        public List <Coordinate> BfsSearch(Coordinate start, Coordinate end)
        {
            Queue <Coordinate> queue = new Queue <Coordinate>();

            queue.Enqueue(start);
            SearchResource.Clear();
            VisitedGraph[start.X, start.Y] = true;
            bool isFound = false;

            while (queue.Count != 0)
            {
                var c = queue.Dequeue();
                if (c == end)
                {
                    isFound = true;
                    break;
                }
                for (int i = 0; i < 4; ++i)
                {
                    var co = new Coordinate()
                    {
                        X = c.X + XDirections[i],
                        Y = c.Y + YDirections[i]
                    };
                    if ((IsValid(co) || co == end) && !VisitedGraph[co.X, co.Y])
                    {
                        queue.Enqueue(co);
                        VisitedGraph[co.X, co.Y] = true;
                        PathFound[co.X, co.Y]    = c;
                    }
                }
            }
            if (isFound)
            {
                return(GetPath(start, end));
            }
            return(null);
        }
示例#2
0
        private Coordinate?FindLongestPath(Coordinate target, Coordinate start)
        {
            CandidatePaths.Clear();
            var nowList = new List <Coordinate>();

            SearchResource.Clear();
            Dfs(CandidatePaths, nowList, start, 0);
            int maxLen = 0;
            List <Coordinate> maxList = null;

            foreach (var l in CandidatePaths)
            {
                if (l.Count > maxLen)
                {
                    maxLen  = l.Count;
                    maxList = l;
                }
            }
            if (maxList == null)
            {
                return(null);
            }
            return(maxList.First());
        }