Exemplo n.º 1
0
        public static IEnumerable <IDAGNode <T> > GetAccessibleNodes <T>(this IDAGNode <T> root)
        {
            Queue <IDAGNode <T> > queue = new Queue <IDAGNode <T> >();

            queue.Enqueue(root);
            while (queue.Count > 0)
            {
                var node = queue.Dequeue();
                foreach (var dest in node.Destinations)
                {
                    queue.Enqueue((IDAGNode <T>)dest);
                }
                yield return(node);
            }
        }
Exemplo n.º 2
0
        public static IDAGNode BFS(this IDAGNode origin, Func <IDAGNode, bool> match)
        {
            Queue <IDAGNode> queue = new Queue <IDAGNode>();

            queue.Enqueue(origin);
            while (queue.Count > 0)
            {
                var node = queue.Dequeue();
                if (match(node))
                {
                    return(node);
                }
                foreach (var dest in node.Destinations)
                {
                    queue.Enqueue(dest);
                }
            }
            return(null);
        }
Exemplo n.º 3
0
        public static IDAGNode DFS(this IDAGNode origin, Func <IDAGNode, bool> match)
        {
            Stack <IDAGNode> stack = new Stack <IDAGNode>();

            stack.Push(origin);
            while (stack.Count > 0)
            {
                var node = stack.Pop();
                if (match(node))
                {
                    return(node);
                }
                foreach (var dest in node.Destinations)
                {
                    stack.Push(dest);
                }
            }
            return(null);
        }
Exemplo n.º 4
0
 public static bool CanReach(this IDAGNode origin, IDAGNode dest)
 {
     return(origin.BFS(dest.Equals) != null);
 }