public void IndexMinPQ_Contains()
    {
        var q = new IndexPriorityQueue<int>();

        Assert.IsFalse(q.Contains(1));

        q.Enqueue(1, 10);
        q.Enqueue(1, 20);
        q.Enqueue(1, 30);

        Assert.IsTrue(q.Contains(1));
        q.Dequeue();
        Assert.IsTrue(q.Contains(1));
        q.Dequeue();
        Assert.IsTrue(q.Contains(1));
        q.Dequeue();
        Assert.IsFalse(q.Contains(1));
    }
    public void IndexMinPQ_Enqueue()
    {
        var q = new IndexPriorityQueue<int>();
        var minItem = int.MaxValue;

        for (int i = 0; i < items.Length; i++)
        {
            // After adding each item, the min item should be on top
            q.Enqueue(i, items[i]);
            minItem = Math.Min(items[i], minItem);

            Assert.IsTrue(q.Contains(i));
            Assert.AreEqual(q.MinKey(), minItem);
        }
    }
    public void IndexMinPQ_Dequeue()
    {
        var q = new IndexPriorityQueue<int>();
        for (int i = 0; i < items.Length; i++)
        {
            q.Enqueue(i, items[i]);
        }

        var sortedItems = new List<int>(items);
        sortedItems.Sort();

        foreach (var item in sortedItems)
        {
            // The top of the queue returns the items in sorted order 
            var minIndex = q.Dequeue();
            Assert.IsFalse(q.Contains(minIndex));
            Assert.AreEqual(items[minIndex], item);
        }
    }
Пример #4
0
        protected override void Relax(EdgeWeightedDigraph digraph, int vertex)
        {
            foreach (var edge in digraph.Adjacent(vertex))
            {
                int w = edge.W;
                if (distanceTo[w] > distanceTo[vertex] + edge.Weight)
                {
                    distanceTo[w] = distanceTo[vertex] + edge.Weight;
                    edgeTo[w]     = edge;

                    if (priorityQueue.Contains(w))
                    {
                        priorityQueue.Change(w, distanceTo[w]);
                    }
                    else
                    {
                        priorityQueue.Insert(w, distanceTo[w]);
                    }
                }
            }
        }