public virtual void UpdateDirectedEdge(WeightedNode <CONTENT> to, double cost) { var indexOfNeighbor = IndexOfNeighbor(to); Debug.Assert(indexOfNeighbor >= 0); if (indexOfNeighbor >= 0) { Costs[indexOfNeighbor] = cost; } }
public override void UpdateDirectedEdge(WeightedNode <CONTENT> to, double cost) { var indexOfNeighbor = IndexOfNeighbor(to); Debug.Assert(indexOfNeighbor >= 0); if (indexOfNeighbor >= 0) { var queue = amortizedCosts[indexOfNeighbor]; queue.Enqueue(cost); if (queue.Count > QueueSize) { queue.Dequeue(); } base.UpdateDirectedEdge(to, (int)queue.Average()); } }
protected void UpdateDirectedEdge(WeightedNode <CONTENT> from, WeightedNode <CONTENT> to, double cost) { if (updateEdgePolicy != null) { var hasNeighbor = from.HasNeighbor(to); Debug.Assert(hasNeighbor); if (hasNeighbor) { if (updateEdgePolicy(oldEdge: from.Cost(to), newEdge: cost)) { from.UpdateDirectedEdge(to, cost); } } } else { from.UpdateDirectedEdge(to, cost); } }
/// <summary> /// Adds the directed edge. /// MUST not already exist /// </summary> /// <param name="to">To.</param> /// <param name="cost">Cost.</param> public virtual void AddDirectedEdge(WeightedNode <CONTENT> to, double cost) { base.AddDirectedEdge(to); Costs.Add(cost); }
public void UpdateUndirectedEdge(WeightedNode <CONTENT> between, WeightedNode <CONTENT> and, double cost) { UpdateDirectedEdge(between, and, cost); UpdateDirectedEdge(and, between, cost); }
public void AddUndirectedEdge(WeightedNode <CONTENT> between, WeightedNode <CONTENT> and, double cost) { AddDirectedEdge(between, and, cost); AddDirectedEdge(and, between, cost); }
protected virtual void AddDirectedEdge(WeightedNode <CONTENT> from, WeightedNode <CONTENT> to, double cost) { from.AddDirectedEdge(to, cost); }