public DijkstraSP(EdgeWeightedDigraph G, int s) { foreach (DirectedEdge e in G.GetEdges()) { if (e.GetWeight() < 0) { throw new ArgumentException("Negative weight"); } } distTo = new double[G.GetVertices()]; edgeTo = new DirectedEdge[G.GetVertices()]; ValidateVertex(s); for (int v = 0; v < G.GetVertices(); v++) { distTo[v] = double.PositiveInfinity; } distTo[s] = 0.0; // relax vertices in order of distance from s Comparer <double> comparer = Comparer <double> .Default; pq = new IndexMinPQ <Double>(G.GetVertices(), comparer); pq.Insert(s, distTo[s]); while (!pq.IsEmpty()) { pq.DelMin(out int index, out double key); int v = index; foreach (DirectedEdge e in G.GetAdj(v)) { Relax(e); } } }
public HeapIterator(Comparer <Key> Comparer, int Size, int N, int[] indexes, Key[] keys) { this.Comparer = Comparer; this.Size = Size; this.N = N; this.Keys = keys; if (Comparer == null) { copy = new IndexMinPQ <Key>(Size, Comparer); } else { copy = new IndexMinPQ <Key>(Size, Comparer); } for (int i = 0; i <= N; i++) { copy.Insert(indexes[i], this.Keys[i]); } }