public void criaNodos(Nodo origem, Nodo destino)
 {
     nodos = new List<Nodo>();
     nodos.Add(origem);
     gameObjectsNodos = GameObject.FindGameObjectsWithTag("Nodo");
     foreach (var nodo in gameObjectsNodos) {
         Nodo aux = nodo.GetComponent<Nodo>();
         nodos.Add(aux);
     }
     nodos.Add(destino);
     grafo = new Grafo(nodos.ToArray());
 }
 public List<Nodo> buscaAStar(Nodo origem, Nodo destino)
 {
     MetodosDeBusca busca = new MetodosDeBusca();
     busca.AStar(grafo, origem, destino);
     //busca.mostraOrdemVisitacao();
     return busca.Solucao;
 }
        public void AStar(Grafo grafo, Nodo origem, Nodo destino)
        {
            grafo.nodos = this.limpaNodos(grafo.nodos);

            fila = new Queue<Nodo>();
            Visitacao = new List<Nodo>();

            foreach (Nodo nodo in grafo.nodos) {
                if (nodo == origem)
                    continue;

                nodo.TempoInicio = int.MaxValue;
                nodo.predecessor = null;
                nodo.Cor = Cor.Branco;
            }
            origem.Cor = Cor.Cinza;
            origem.TempoInicio = 0;
            origem.predecessor = null;
            // Adiciona o nodo de origem na fila.
            fila.Enqueue(origem);
            while (fila.Count > 0) {
                Nodo u = fila.Dequeue();
                Visitacao.Add(u);
                if (u == destino)
                    break;
                foreach (Nodo v in u.ListaAdj) {
                    if (v.Cor == Cor.Branco) {
                        v.Cor = Cor.Cinza;
                        v.TempoInicio = u.TempoInicio + 1;
                        v.predecessor = u;
                        //fila.enqueueNodeOrdered(v, 'F');
                        fila.Enqueue(v);
                        fila = new Queue<Nodo>(fila.OrderBy(linq => linq.F));
                    }
                }
                u.Cor = Cor.Preto;
            }
            this.fazCaminhoSolucao();
        }
Example #4
0
 public Grafo(Nodo[] nodos)
 {
     this.nodos = nodos;
 }
 public Nodo[] limpaNodos(Nodo[] nodos)
 {
     List<Nodo> nodoTest = new List<Nodo>();
     foreach (var no in nodos) {
         Nodo node = no;
         node.Cor = Cor.Branco;
         node.predecessor = null;
         nodoTest.Add(node);
     }
     return nodoTest.ToArray();
 }