Exemplo n.º 1
0
        /// Inserts a PriorityNode into the heap.
        public void Insert(T node, float priority)
        {
            if (node == null)
            {
                return;
            }

            if (HeapContainsNode(node))
            {
                return;
            }

            if (size + 1 == heap.Length)
            {
                DoubleHeapSize();
            }

            PriorityNode <T> n = new PriorityNode <T>(node, priority);

            int hole = ++size;

            heap[0] = n;

            for (; n.priority < heap[hole / 2].priority && hole > 1; hole /= 2)
            {
                heap[hole] = heap[hole / 2];
            }

            heap[hole] = n;
        }
Exemplo n.º 2
0
        /// Doubles the current heap size and copies its contents.
        private void DoubleHeapSize()
        {
            PriorityNode <T>[] temp = new PriorityNode <T> [heap.Length * 2];
            for (int i = 1; i < heap.Length; i++)
            {
                temp[i] = heap[i];
            }

            heap = temp;
        }