Beispiel #1
0
        public static ITraversable SpanningTreeKruskal(ITraversable graph)
        {
            if (graph.IsDirected)
            {
                throw new NotImplementedException("Spanning tree is not available on directed graph.");
            }

            var vertices     = graph.GetVertices();
            var unionFind    = new UnionSet(vertices.Max() + 1);
            var spanningTree = new Graph {
                IsDirected = false
            };

            spanningTree.AddVertexRange(vertices.Max() + 1);

            var orderedEdges = vertices
                               .SelectMany(v => graph.GetAdjacentEdges(v))
                               .ToList();

            orderedEdges.Sort(new EdgeWeightComparer()); // sort based on weight

            // keep adding edges till all components are connected.
            foreach (var e in orderedEdges)
            {
                if (!unionFind.SameComponent(e.Start, e.Stop))
                {
                    unionFind.UnionSets(e.Start, e.Stop);
                    spanningTree.AddDoubleEdge(e);
                }
            }

            return(spanningTree);
        }
Beispiel #2
0
 public Node(int x, int y, ITraversable tile)
 {
     X             = x;
     Y             = y;
     IsTraversable = tile.IsTraversable;
     tile.OnTraversabilityChange += HandleTraversabilityChange;
 }
 public void PreChildrenVisit(ITraversable traversedElement)
 {
     if (traversedElement is EMInclude)
     {
         includesStack.Push(traversedElement as EMInclude);
     }
 }
Beispiel #4
0
        public static void BFS(
            ITraversable traversable,
            IBFSVisitor visitor,
            int startVertex)
        {
            var toVisit  = new Queue <int>();
            var enqueued = new HashSet <int>();

            toVisit.Enqueue(startVertex);
            enqueued.Add(startVertex);

            while (toVisit.Any())
            {
                var v = toVisit.Dequeue();
                visitor.EarlyVisit(v);
                var adj = traversable.GetAdjacentEdges(v);

                foreach (var a in adj)
                {
                    if (!enqueued.Contains(a.Stop))
                    {
                        visitor.Visit(a);
                        toVisit.Enqueue(a.Stop);
                        enqueued.Add(a.Stop);
                    }
                }

                visitor.LateVisit(v);
            }
        }
Beispiel #5
0
    private static void ThreeDeepTest()
    {
        ITraversable demoTree = ThreeDeepTree();

        MaxHeap maxHeap = new MaxHeap(demoTree);

        Assert.True(maxHeap.Count + 1 == maxHeap.InsertionIndex);
        Assert.True(maxHeap.Count == 30);
        //  Debug.Log(maxHeap.Count);
        int counter = 1;
        int score   = maxHeap.Pop().HeapScore;

        while (maxHeap.HasTop())
        {
            int nextScore = maxHeap.Pop().HeapScore;
            Assert.True(score >= nextScore);
            Debug.Log(nextScore);
            score = nextScore;
            counter++;
        }
        Debug.Log("Insertion Index: " + maxHeap.InsertionIndex);
        Debug.Log("incrementor counter: " + counter);
        Debug.Log("maxHeap.Count: " + maxHeap.Count);
        Assert.True(maxHeap.Count + 1 == maxHeap.InsertionIndex);
    }
Beispiel #6
0
    private void AddNodeToHeap(ITraversable node)
    {
        int childIndex = InsertionIndex;

        int parentIndex = InsertionIndex / 2;

        heap[InsertionIndex] = node;

        while (parentIndex > 0)
        {
            if (heap[childIndex].HeapScore > heap[parentIndex].HeapScore)//if you are larger than parent, swap
            {
                Swap(childIndex, parentIndex);

                childIndex = parentIndex;

                parentIndex = childIndex / 2;
            }
            else//else you are smaller, so
            {
                parentIndex = 0;//break out of the loop;
            }
        }
        Count++;
        InsertionIndex++;
    }
Beispiel #7
0
    public void HeapTestSimplePasses()
    {
        ITraversable demoT = StarterTree(true);

        MaxHeap maxHeap = new MaxHeap(demoT);

        //Debug.Log(maxHeap.InsertionIndex);

        Assert.True(maxHeap.HasTop());

        int count = demoT.ToNodes().Count;

        Assert.True(maxHeap.Count == count);
        Assert.True(maxHeap.Count + 1 == maxHeap.InsertionIndex);
        //Debug.Log(count);

        int score = maxHeap.Pop().HeapScore;

        while (maxHeap.HasTop())
        {
            int nextScore = maxHeap.Pop().HeapScore;
            Debug.Log(nextScore);
            Assert.True(score >= nextScore);
            score = nextScore;
        }

        ThreeDeepTest();
    }
Beispiel #8
0
 public DemoTraversable(bool isLeaf, int heapScore, ITraversable from, ITraversable[] to)
 {
     IsLeaf    = isLeaf;
     HeapScore = heapScore;
     this.from = from;
     this.to   = to;
 }
Beispiel #9
0
 public DemoTraversable(int heapScore, DemoTraversable from, bool isLeaf)
 {
     IsLeaf    = isLeaf;
     HeapScore = heapScore;
     this.from = from;
     to        = null;
 }
Beispiel #10
0
 public DemoTraversable(int heapScore)
 {
     IsLeaf    = false;
     HeapScore = heapScore;
     from      = null;
     to        = null;
 }
Beispiel #11
0
        public static void DFS(
            ITraversable traversable,
            IDFSVisitor visitor,
            int startVertex)
        {
            var toVisit = new Stack <int>();
            var visited = new HashSet <int>();

            toVisit.Push(startVertex);
            while (toVisit.Any())
            {
                var v = toVisit.Pop();
                visitor.EarlyVisit(v);
                visited.Add(v);
                var adj = traversable.GetAdjacentEdges(v);

                foreach (var a in adj)
                {
                    visitor.Visit(a);
                    if (!visited.Contains(a.Stop))
                    {
                        toVisit.Push(a.Stop);
                    }
                }

                visitor.LateVisit(v);
            }
        }
Beispiel #12
0
 public void PreChildrenVisit(ITraversable traversedElement)
 {
     if (traversedElement is EMInclude)
     {
         includesStack.Push(traversedElement as EMInclude);
     }
 }
Beispiel #13
0
 public void Reset()
 {
     this.stage = !this.filterByPinPosition || this.filteredPinPosition != PinnedRowPosition.Bottom ? (!this.filterByPinPosition || this.filteredPinPosition != PinnedRowPosition.None ? ViewInfoTraverser.Stages.TopPinnedSystemRows : ViewInfoTraverser.Stages.TopSystemRows) : ViewInfoTraverser.Stages.BottomPinnedRows;
     this.SetCollectionForStage(false);
     this.collection = (ITraversable)null;
     this.index      = -1;
     this.current    = (GridViewRowInfo)null;
 }
Beispiel #14
0
 public void PostChildrenVisit(ITraversable traversedElement)
 {
     --level;
     if (level >= minLevel && level <= maxLevel && traversedElement is EMElement)
     {
         action(traversedElement as EMElement);
     }
 }
Beispiel #15
0
    public MaxHeap(ITraversable root)
    {
        Count          = 0;
        InsertionIndex = 1;

        heap = new ITraversable[size];

        TryAddToHeap(root);
    }
Beispiel #16
0
        public void PostChildrenVisit(ITraversable traversedElement)
        {
            renderer(traversedElement, builder, includesStack);

            if (traversedElement is EMInclude)
            {
                includesStack.Pop();
            }
        }
        public void PostChildrenVisit(ITraversable traversedElement)
        {
            renderer(traversedElement, builder, includesStack);

            if (traversedElement is EMInclude)
            {
                includesStack.Pop();
            }
        }
Beispiel #18
0
        public virtual ICollectionBuilder <A, CC> Append(ITraversable <A> trav)
        {
            ICollectionBuilder <A, CC> builder = this;

            foreach (var item in trav)
            {
                builder = builder.Append(item);
            }
            return(builder);
        }
Beispiel #19
0
        protected override void OnItemException(ITraversable item, Exception e)
        {
            if (Debugger.IsAttached)
            {
                Debugger.Break();
            }

            Console.WriteLine("-------------------------------------------------------");
            Console.WriteLine($"ERROR while working on {item.Value}.");
            Console.WriteLine(e);
        }
Beispiel #20
0
        public static ITraversable Find(this ITraversable item, EpubPath path)
        {
            ITraversable result = item;

            while (path.ContainsKeys && result != null)
            {
                result = result.Child(path.FirstKey);
                path   = path.Rest;
            }
            return(result);
        }
Beispiel #21
0
            public void PostChildrenVisit(ITraversable traversedElement)
            {
                if (traversedElement is EMHeader)
                {
                    action(traversedElement as EMHeader, includesStack);
                }

                if (traversedElement is EMInclude)
                {
                    includesStack.Pop();
                }
            }
Beispiel #22
0
    // ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
    public static Stack <T> TwinStarT <T>(ITraversable begNode, ITraversable endNode, bool dualSearch = true) where T : ITraversable
    {
        object chainLocker = new object();

        if (dualSearch)
        {
            Thread backwards = new Thread(() => SoloStar <T>(endNode, begNode, chainLocker, false, 0f, 1f));
            backwards.Start();
        }

        return(SoloStar <T>(begNode, endNode, chainLocker));
    }
Beispiel #23
0
        public static bool Equals(ITraversable left, ITraversable right)
        {
            if (left.GetVertices().Count() != right.GetVertices().Count())
            {
                return(false);
            }
            var verticesEquals = left.GetVertices().SequenceEqual(right.GetVertices());
            var edgesEquals    = !left.GetVertices()
                                 .Any(v => !left.GetAdjacentEdges(v).SequenceEqual(right.GetAdjacentEdges(v)));

            return(verticesEquals && edgesEquals);
        }
Beispiel #24
0
            public void PostChildrenVisit(ITraversable traversedElement)
            {
                if (traversedElement is EMHeader)
                {
                    action(traversedElement as EMHeader, includesStack);
                }

                if (traversedElement is EMInclude)
                {
                    includesStack.Pop();
                }
            }
Beispiel #25
0
        private bool ApplyFilters(ITraversable item)
        {
            foreach (var(path, target) in Query.Filters)
            {
                // use object.Equals to achieve magic filters
                if (!Equals(target, item.SafeGet(path)))
                {
                    return(false);
                }
            }

            return(true);
        }
Beispiel #26
0
        // ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
        public static void ReverseOriginChain(ITraversable endNode)
        {
            ITraversable currentNode  = endNode;
            ITraversable previousNode = null;
            ITraversable nextNode     = null;

            do
            {
                nextNode           = currentNode.origin;
                currentNode.origin = previousNode;
                previousNode       = currentNode;
                currentNode        = nextNode;
            } while (currentNode != null);
        }
Beispiel #27
0
 //this isn't really recursive. IDK why just don't worry about it
 private void TryAddToHeap(ITraversable node)
 {
     if (node.IsLeaf)
     {
         AddNodeToHeap(node);
     }
     else
     {
         foreach (ITraversable traversable in node.ToNodes())
         {
             TryAddToHeap(traversable);
         }
     }
 }
Beispiel #28
0
        // ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
        public static Stack <T> TwinStarT <T>(ITraversable begNode, ITraversable endNode, bool dualSearch = true) where T : ITraversable
        {
            object chainLocker = new object();


            if (dualSearch)
            {
                Task backwards = Task.Run(() => SoloStar <T>(endNode, begNode, chainLocker, false, 0f, 1f));
            }

            Task <Stack <T> > forward = Task.Run(() => SoloStar <T>(begNode, endNode, chainLocker));

            return(forward.Result);
        }
Beispiel #29
0
        public static IEnumerable <IEnumerable <int> > ConnectedComponents(ITraversable g)
        {
            var vs    = g.GetVertices().ToList();
            var comps = new List <List <int> >();

            while (vs.Any())
            {
                var vis = new ConnectedComponentsVistor();
                BFS(g, vis, vs.First());
                vs.RemoveAll(e => vis.Component.Contains(e));
                comps.Add(vis.Component);
            }

            return(comps);
        }
Beispiel #30
0
        // ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
        public static void ClearOriginChain(ITraversable endNode)
        {
            foreach (ITraversable tn in endNode.GetConnectedTraversables())
            {
                if (tn.origin == endNode)
                {
                    ClearOriginChain(tn);
                }
            }

            if (endNode.origin != null)
            {
                ClearOriginChain(endNode.origin);
                endNode.origin = null;
            }
        }
Beispiel #31
0
        public static StageSet GetTraversedStages(ITraversable start)
        {
            StageSet stages = new StageSet();

            stages.Add((Stage)start);

            foreach (Stage stage in start.NextStages)
            {
                if (!stages.Contains(stage))
                {
                    stages.UnionWith(GetTraversedStages((ITraversable)stage));
                }
            }

            return(stages);
        }
Beispiel #32
0
        private static Graph Residuals(ITraversable graph)
        {
            var res = new Graph();
            var numberOfVertices = graph.GetVertices().Max() + 1;

            res.AddVertexRange(numberOfVertices);

            foreach (var v in graph.GetVertices())
            {
                foreach (var e in graph.GetAdjacentEdges(v))
                {
                    res.AddEdge(e);
                }
            }

            return(res);
        }
Beispiel #33
0
        public static T SafeExecute <T>(this ITraversable item, EpubPath path, Func <ITraversable, T> action)
        {
            T safeExecuteImpl(ITraversable current, EpubPath currentPath)
            {
                if (currentPath.IsEmpty)
                {
                    return(action(current));
                }

                using (var child = current.Child(currentPath.FirstKey))
                {
                    return(safeExecuteImpl(child, currentPath.Rest));
                }
            }

            // will ensure that all intermediate traversables are disposed
            return(safeExecuteImpl(item, path));
        }
Beispiel #34
0
        void Utility.IStage.Leave()
        {
            _ResleaseSession();

            if (_Traversable != null)
            {
                _Binder.Unbind<ITraversable>(_Traversable);
                _Traversable = null;
            }

            _Member.BeginTraversable -= _OnBeginTraver;
            _Member.EndTraversable -= _OnEndTraver;

            _UnregisterQuit(_Player);
            _Unbind(_Player, _Binder);
            _Scene.ShutdownEvent -= ExitWorldEvent;
            _Scene.Exit(_Member);
            _Binder.Unbind<IBelongings>(_Belongings);

            _Updater.Shutdown();
        }
Beispiel #35
0
 private void _OnEndTraver(ITraversable traversable)
 {
     _Traversable = null;
     _Binder.Unbind<ITraversable>(traversable);
     _Bind(_Player, _Binder);
 }
Beispiel #36
0
 void _OnBeginTraver(ITraversable traversable)
 {
     _Traversable = traversable;
     _Unbind(_Player, _Binder);
     _Binder.Bind<ITraversable>(traversable);
 }