Пример #1
0
    public IEnumerable <DirectedEdge> PathTo(int v)
    {
        if (!HasPathTo(v))
        {
            return(null);
        }
        Stack <DirectedEdge> path = new Stack <DirectedEdge>();

        for (DirectedEdge e = m_edgeTo[v]; e != null; e = m_edgeTo[e.From()])
        {
            path.Push(e);
        }
        return(path);
    }
Пример #2
0
 /// <summary>
 /// relax edge e, but update if you find a *longer* path
 /// </summary>
 /// <param name="e"></param>
 private void Relax(DirectedEdge e)
 {
     int v = e.From(), w = e.To();
     if (_distTo[w] < _distTo[v] + e.Weight)
     {
         _distTo[w] = _distTo[v] + e.Weight;
         _edgeTo[w] = e;
     }
 }
 /// <summary>
 /// Adds the directed edge <tt>e</tt> to the edge-weighted digraph (if there
 /// is not already an edge with the same endpoints).
 /// </summary>
 /// <param name="e">e the edge</param>
 public void AddEdge(DirectedEdge e)
 {
     var v = e.From();
     var w = e.To();
     if (_adj[v][w] != null) return;
     E++;
     _adj[v][w] = e;
 }
 private void TraceBackDirectedCycle(DirectedEdge e, int w)
 {
     _cycle = new Collections.Stack<DirectedEdge>();
     while (e.From() != w)
     {
         _cycle.Push(e);
         e = _edgeTo[e.From()];
     }
     _cycle.Push(e);
 }
Пример #5
0
 /// <summary>
 /// relax edge e and update pq if changed
 /// </summary>
 /// <param name="e"></param>
 private void Relax(DirectedEdge e)
 {
     int v = e.From(), w = e.To();
     if (_distTo[w] > _distTo[v] + e.Weight)
     {
         _distTo[w] = _distTo[v] + e.Weight;
         _edgeTo[w] = e;
         if (_pq.Contains(w)) _pq.DecreaseKey(w, _distTo[w]);
         else _pq.Insert(w, _distTo[w]);
     }
 }
Пример #6
0
 public void AddEdge(DirectedEdge e)
 {
     m_adj[e.From()].Add(e);
     m_e++;
 }
Пример #7
0
 /// <summary>
 /// Adds the directed edge <tt>e</tt> to this edge-weighted digraph.
 /// </summary>
 /// <param name="e">e the edge</param>
 /// <exception cref="IndexOutOfRangeException">unless endpoints of edge are between 0 and V-1</exception>
 public void AddEdge(DirectedEdge e)
 {
     var v = e.From();
     var w = e.To();
     ValidateVertex(v);
     ValidateVertex(w);
     _adj[v].Add(e);
     E++;
 }