Ejemplo n.º 1
0
        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);
            }
        }