Example #1
0
        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);
                }
            }
        }
Example #2
0
 public bool HasNext()
 {
     return(!copy.IsEmpty());
 }