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