private double SafeCost(Node destination, CostStrategy strategy) { var result = Cost(destination, NoVisitedNodes(), strategy); if (result == Unreachable) { throw new InvalidOperationException("Unreachable destination"); } return(result); }
internal double Cost(Node destination, List <Node> visitedNodes, CostStrategy strategy) { if (this == destination) { return(0); } if (visitedNodes.Contains(this)) { return(Unreachable); } if (this._links.Count == 0) { return(Unreachable); } return(_links .ConvertAll(link => link.Cost(destination, CopyWithThis(visitedNodes), strategy)) .Min()); }
internal double Cost(Node destination, List <Node> visitedNodes, CostStrategy strategy) { return(_target.Cost(destination, visitedNodes, strategy) + strategy(_cost)); }