public static bool Search <T>(IUnweightedGraph <T> graph, T start, T goal, out Dictionary <T, T> cameFrom)
        {
            var foundPath = false;
            var frontier  = new Queue <T>();

            frontier.Enqueue(start);

            cameFrom = new Dictionary <T, T>();
            cameFrom.Add(start, start);

            while (frontier.Count > 0)
            {
                var current = frontier.Dequeue();
                if (current.Equals(goal))
                {
                    foundPath = true;
                    break;
                }

                foreach (var next in graph.GetNeighbors(current))
                {
                    if (!cameFrom.ContainsKey(next))
                    {
                        frontier.Enqueue(next);
                        cameFrom.Add(next, current);
                    }
                }
            }

            return(foundPath);
        }
Exemple #2
0
        public static void Search <T>(IUnweightedGraph <T> graph, T start, int length, out Dictionary <T, T> cameFrom)
        {
            var frontier = new Queue <T>();

            frontier.Enqueue(start);

            cameFrom = new Dictionary <T, T>();
            cameFrom.Add(start, start);

            var forNextLevel = 1;

            while (frontier.Count > 0 && length > 0)
            {
                var current = frontier.Dequeue();

                foreach (var next in graph.GetNeighbors(current))
                {
                    if (!cameFrom.ContainsKey(next))
                    {
                        frontier.Enqueue(next);
                        cameFrom.Add(next, current);
                    }
                }

                forNextLevel--;
                if (forNextLevel == 0)
                {
                    forNextLevel = frontier.Count;
                    length--;
                }
            }
        }