IEnumerator ResolvePorAEstrela()
    {
        List <Celula> fila      = new List <Celula>();
        List <Celula> visitados = new List <Celula>();

        Celula    atual = raiz;
        Transform fundo = atual.gameObject.transform.GetChild(1);

        fundo.gameObject.GetComponent <MeshRenderer>().material.color = Color.blue;

        atual.GScore = 0;
        atual.HScore = (int)((atual.gameObject.transform.position - fim.gameObject.transform.position).magnitude * 1000);
        atual.FScore = atual.HScore;


        while (true)  // && c<15) {
        {
            List <Celula> filhos = atual.getFilhos();
            print(string.Format("atual: {0} H: {1} G: {2} F: {3}", atual.id, atual.HScore, atual.GScore, atual.FScore));

            foreach (Celula v in filhos)
            {
                v.HScore = (int)((v.gameObject.transform.position - fim.gameObject.transform.position).magnitude * 1000);


                v.GScore = v.pai.GScore + 10;
                v.FScore = v.GScore + v.HScore;

                fila.Add(v);

                fundo = v.gameObject.transform.GetChild(1);
                fundo.gameObject.GetComponent <MeshRenderer>().material.color = Color.gray;
            }
            if (!instantaneo)
            {
                yield return(new WaitForSeconds(velocidade));
            }
            ;

            fila.Sort((x, y) => x.FScore.CompareTo(y.FScore));

            atual = fila[0];
            visitados.Add(atual);
            fila.Remove(atual);


            if (atual == fim)
            {
                fundo = fim.gameObject.transform.GetChild(1);
                fundo.gameObject.GetComponent <MeshRenderer>().material.color = Color.red;
                break;
            }
            fundo = atual.gameObject.transform.GetChild(1);
            fundo.gameObject.GetComponent <MeshRenderer>().material.color = Color.blue;
            if (!instantaneo)
            {
                yield return(new WaitForSeconds(velocidade));
            }
        }

        //achou o caminho
        atual = fim;
        while (atual.pai != null)
        {
            atual = atual.pai;
            fundo = atual.gameObject.transform.GetChild(1);
            fundo.gameObject.GetComponent <MeshRenderer>().material.color = Color.green;

            yield return(new WaitForSeconds(velocidade));
        }

        btnGera.interactable = true;
        yield return(null);
    }