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 bool HasNext() { return(!copy.IsEmpty()); }