public HeuristicNode <T> ChildNode(IInformedProblem <T> problem, IAction <T> action, IHeustisticFunction <T> heurisctic) { T state = problem.Transition(this.State, action); int stepCost = problem.StepCost(this.State, action); int totalCost = this.PathCost + stepCost; int heuristicCost = totalCost + heurisctic.Calculate(problem, state); return(new HeuristicNode <T>(state, action, this, totalCost, heuristicCost)); }