public void OptimizeCosts <T>(AStarState possibleParent, int costFromPossibleParent, IUpdate <T> refresher) where T : AStarState, IComparable <T> { var gPosiible = possibleParent.g + costFromPossibleParent; //перевіряємо, чи можлива реальна вартість більша теперішньої if (gPosiible >= g) { return; } //присвоюємо батьківській вершині можливу вершинну (вище переконались, що у неї вигідніше піти) parent = possibleParent; g = gPosiible; //присвоюємо нову оцінку f = g + h; //перераховуємо сумарну оцінку //оновлюємо пріорітети вершин if (refresher != null) { refresher.UpdatePriorityQueue((T)this); } //обираємо найоптимальнішу з вершин, у які можемо піти для кожної вершини foreach (var successorData in successors) { successorData.Key.OptimizeCosts(this, successorData.Value, refresher); } }