Пример #1
0
    //Algoritmo A*
    Nodo crearRecorrido(Vector2 posicion, PuntoRecorrido[] fin)
    {
        //Creamos las colas frontera y descubiertos(esta ultima no requeriria de cola con prioridad).
        ColaNodos frontera = new ColaNodos();

        frontera.IntroducirNodosEnCruz(posicion, fin);
        ColaNodos descubiertos = new ColaNodos();

        do
        {
            //Quita el nodo de la frontera y lo evalua
            Nodo aux = frontera.Primero();
            frontera.QuitarNodo();
            //si es el objetivo ha encontrado el objetivo
            if (aux.este.EstaEstePuntoEn(fin))
            {
                return(aux);
            }
            //Lo anyade a los nodos descubiertos
            descubiertos.IntroducirNodo(aux);
            //Expande los hijos
            Nodo[] auxs = aux.Hijos(fin);
            //Evalua cada hijo
            for (int i = 0; i < auxs.Length; i++)
            {   //Si ya ha sido descubierto lo ignora
                if (!descubiertos.EstaElNodo(auxs[i]))
                {
                    Nodo auxc = auxs[i];
                    //si no esta en frontera y su estimacion es menor que el anterior lo sustituye
                    if (auxc.f > auxs[i].f)
                    {
                        frontera.QuitarNodo(auxc);
                        frontera.IntroducirNodo(auxs[i]);
                    }
                    else
                    {
                        //En caso contrario lo introduce.
                        frontera.IntroducirNodo(auxs[i]);
                    }
                }
            }
            //Si la frontera se queda vacia no hay solucion.
        } while (frontera.Primero() != null);
        return(null);
    }
Пример #2
0
    void Iniciar()
    {
        conQueColisiona = LayerMask.GetMask("Obstaculos", "Recorrido");
        //Busca todos los nodos del grafo.
        GameObject[] auxiliar = GameObject.FindGameObjectsWithTag("Path");
        puntosTotales = new PuntoRecorrido[auxiliar.Length];
        for (int i = 0; i < puntosTotales.Length; i++)
        {
            puntosTotales[i] = auxiliar[i].GetComponent <PuntoRecorrido>();
        }
        ReiniciarRed();

        Nodo      a    = new Nodo(null, puntosTotales[0], null, 0, 0);
        ColaNodos cola = new ColaNodos(a);

        for (int i = 1; i < puntosTotales.Length; i++)
        {
            cola.IntroducirNodo(new Nodo(null, puntosTotales[i], null, 0, 0));
        }
    }