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); } }
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]); } } } }