コード例 #1
0
        public virtual void UpdateDirectedEdge(WeightedNode <CONTENT> to, double cost)
        {
            var indexOfNeighbor = IndexOfNeighbor(to);

            Debug.Assert(indexOfNeighbor >= 0);
            if (indexOfNeighbor >= 0)
            {
                Costs[indexOfNeighbor] = cost;
            }
        }
コード例 #2
0
        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());
            }
        }
コード例 #3
0
 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);
     }
 }
コード例 #4
0
 /// <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);
 }
コード例 #5
0
 public void UpdateUndirectedEdge(WeightedNode <CONTENT> between, WeightedNode <CONTENT> and, double cost)
 {
     UpdateDirectedEdge(between, and, cost);
     UpdateDirectedEdge(and, between, cost);
 }
コード例 #6
0
 public void AddUndirectedEdge(WeightedNode <CONTENT> between, WeightedNode <CONTENT> and, double cost)
 {
     AddDirectedEdge(between, and, cost);
     AddDirectedEdge(and, between, cost);
 }
コード例 #7
0
 protected virtual void AddDirectedEdge(WeightedNode <CONTENT> from, WeightedNode <CONTENT> to, double cost)
 {
     from.AddDirectedEdge(to, cost);
 }