private void UpdateVertex(Cell s, Cell sprime)
        {
            decimal totalCost = s.G + AlgorithmFormulas.C(s, sprime);

            if (totalCost < sprime.G)
            {
                sprime.G = totalCost;
                sprime.F = sprime.G;

                sprime.Parent = s;

                if (isInFringe[sprime.X, sprime.Y])
                {
                    fringe.Remove(sprime);
                }

                fringe.Push(sprime, sprime.G);
                isInFringe[sprime.X, sprime.Y] = true;
            }
        }
Ejemplo n.º 2
0
        public void ExpandState(Cell s, int i)
        {
            Cell[] sprimes = AlgorithmFormulas.Successors(s, cellGrid);
            for (int k = 0; k < sprimes.Length; k++)
            {
                if (sprimes[k] == null)
                {
                    continue;
                }

                Cell    sprime = sprimes[k];
                decimal cost   = cellData[i][s.X, s.Y].G + AlgorithmFormulas.C(s, sprime);

                if (!itTracker[i][sprime.X, sprime.Y])
                {
                    cellData[i][sprime.X, sprime.Y].G      = decimal.MaxValue;
                    cellData[i][sprime.X, sprime.Y].Parent = null;

                    itTracker[i][sprime.X, sprime.Y] = true;
                }
                if (cellData[i][sprime.X, sprime.Y].G > cost)
                {
                    cellData[i][sprime.X, sprime.Y].G      = cost;
                    cellData[i][sprime.X, sprime.Y].Parent = vectorOf(s);

                    if (!closedList[i][sprime.X, sprime.Y])
                    {
                        if (isInFringe[i][sprime.X, sprime.Y])
                        {
                            fringe[i].Remove(sprime);
                        }
                        fringe[i].Push(sprime, Key(vectorOf(sprime), i));
                        isInFringe[i][sprime.X, sprime.Y] = true;
                    }
                }
            }
        }