private static IEnumerable<Step> GetPathFrom(NodeV1 goalNode1)
 {
     for (NodeV1 current = goalNode1; current.ParentNode != null && current.PreviousStep != null; current = current.ParentNode)
     {
         yield return current.PreviousStep.Value;
     }
 }
 private NodeV1(NodeV1 parentNode, Step previousStep, BoardState state, int distanceFromInitialNode, int estimatedDistanceToGoal)
 {
     this.ParentNode = parentNode;
     this.PreviousStep = previousStep;
     this.State = state;
     this.distanceFromInitialNode = distanceFromInitialNode;
     this.Cost = distanceFromInitialNode + estimatedDistanceToGoal;
 }
        public void Enqueue(NodeV1 node)
        {
            if (node == null)
            {
                throw new ArgumentNullException(nameof(node));
            }

            int newIndex = this.binaryHeap.Count;
            this.binaryHeap.Add(node);

            while (newIndex > 0)
            {
                int parentIndex = (newIndex - 1) / 2;
                if (this.binaryHeap[parentIndex].Cost <= node.Cost)
                {
                    break;
                }

                this.binaryHeap[newIndex] = this.binaryHeap[parentIndex];
                newIndex = parentIndex;
            }

            this.binaryHeap[newIndex] = node;
        }