/// <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); }
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); } }
/// <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); }