Пример #1
0
    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);
            }
        }
    }