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; }
public void DiscoverAdjacent(NodeWithEdge neighboorNode) { }