public void DiscoverAdjacent(NodeWithEdge adjacentNodeInfo)
        {
            ValidateAdjacentNodeThrowIfNeeded(adjacentNodeInfo);
            var estimation = _g(_currentTraversalNodeInfo, adjacentNodeInfo) + _h(_rootNode, adjacentNodeInfo.Node);
            var currentNodeKey = adjacentNodeInfo.Node.Key;

            bool updateOptimalPath = false;
            if (!DistancesByNode.ContainsKey(adjacentNodeInfo.Node.Key))
            {
                DistancesByNode.Add(currentNodeKey, estimation);
                updateOptimalPath = true;
            }
            else if (DistancesByNode[currentNodeKey] > estimation)
            {
                DistancesByNode[currentNodeKey] = estimation;
                updateOptimalPath = true;
            }

            if (updateOptimalPath)
                PreviousNodeInOptimalPath[currentNodeKey] = _currentTraversalNodeInfo.CurrentNode.Key;
        }
 protected virtual void ValidateAdjacentNodeThrowIfNeeded(NodeWithEdge adjacentNode)
 {
 }
 public bool ShouldSkipAdjacentNode(NodeWithEdge adjacentNode)
 {
     return false;
 }
예제 #4
0
 public void DiscoverAdjacent(NodeWithEdge neighboorNode)
 {
 }