예제 #1
0
        /// <summary>
        /// Pasa el nodo a la lista abierta
        /// </summary>
        /// <param name="actual">Punto donde está el algoritmo</param>
        /// <param name="i">Incremento de la coordenada X</param>
        /// <param name="j">Incremento de la coordenada Y</param>
        /// <param name="coste">Coste del paso</param>
        private void NodoAAbierta(Baldosa actual, int i, int j, double coste)
        {
            Mapa[actual.Posicion.X + i, actual.Posicion.Y + j].Abierto = true;
            Mapa[actual.Posicion.X + i, actual.Posicion.Y + j].G       = Mapa[actual.Posicion.X, actual.Posicion.Y].G + coste;
            Mapa[actual.Posicion.X + i, actual.Posicion.Y + j].H       =
                Calculo.Distancia(Mapa[actual.Posicion.X + i, actual.Posicion.Y + j], Meta);
            Mapa[actual.Posicion.X + i, actual.Posicion.Y + j].Padre = Mapa[actual.Posicion.X, actual.Posicion.Y];

            Abierta.Enqueue(Mapa[actual.Posicion.X + i, actual.Posicion.Y + j],
                            Mapa[actual.Posicion.X + i, actual.Posicion.Y + j].F);
        }
예제 #2
0
        private void CostesYTratarNodos(Baldosa actual, int i, int j)
        {
            // Calculamos los costes de acceder
            double coste = Calculo.Distancia(Mapa[actual.Posicion.X, actual.Posicion.Y],
                                             Mapa[actual.Posicion.X + i, actual.Posicion.Y + j]);

            if (Mapa[actual.Posicion.X + i, actual.Posicion.Y + j].Abierto == true) // Actualizamos la lista abierta
            {
                ReorientacionEnlaces(actual, i, j, coste);
            }
            else if (Mapa[actual.Posicion.X + i, actual.Posicion.Y + j].Abierto == null) // Agregamos a la lista abierta
            {
                NodoAAbierta(actual, i, j, coste);
            }
        }
예제 #3
0
        /// <summary>
        /// Llamada al algoritmo
        /// </summary>
        /// <returns>Objeto con el camino y el coste asociado</returns>
        public override AEstrellaResultado Algoritmo()
        {
            AEstrellaResultado resultado;

            // Calculamos la heurística entre el inicio y el final
            Mapa[Inicio.Posicion.X, Inicio.Posicion.Y].H = Calculo.Distancia(Inicio, Meta);

            // Agregamos el nodo inicio a la lista abierta
            Mapa[Inicio.Posicion.X, Inicio.Posicion.Y].Abierto = true;
            Abierta.Enqueue(Mapa[Inicio.Posicion.X, Inicio.Posicion.Y], Mapa[Inicio.Posicion.X, Inicio.Posicion.Y].F);

            // Ejecutamos el algoritmo
            var punto = CalculoAlgoritmo();

            // Procesamos el resultado
            resultado = ProcesarResultado(punto);
            return(resultado);
        }