private DirectedEdge[] edgeTo; // edgeTo[v] = last edge on shortest s->v path public AcyclicSP(EdgeWeightedDigraph G, int s) { distTo = new double[G.V()]; edgeTo = new DirectedEdge[G.V()]; validateVertex(s); for (int v = 0; v < G.V(); v++) { distTo[v] = double.PositiveInfinity; } distTo[s] = 0.0; // visit vertices in toplogical order Topological topological = new Topological(G); if (!topological.hasOrder()) { throw new System.Exception("Digraph is not acyclic."); } foreach (int v in topological.Order()) { foreach (DirectedEdge e in G.Adj(v)) { relax(e); } } }
public AcyclicLP(EdgeWeightedDigraph ewd, int i) { this.distTo = new double[ewd.V()]; this.edgeTo = new DirectedEdge[ewd.V()]; for (int j = 0; j < ewd.V(); j++) { this.distTo[j] = double.NegativeInfinity; } this.distTo[i] = (double)0f; Topological topological = new Topological(ewd); if (!topological.hasOrder()) { string arg_72_0 = "Digraph is not acyclic."; throw new ArgumentException(arg_72_0); } Iterator iterator = topological.order().iterator(); while (iterator.hasNext()) { int i2 = ((Integer)iterator.next()).intValue(); Iterator iterator2 = ewd.adj(i2).iterator(); while (iterator2.hasNext()) { DirectedEdge directedEdge = (DirectedEdge)iterator2.next(); this.relax(directedEdge); } } }