public bool validadorContinuidadeFila(Node filho, BinaryHeapMin minHeap, List <Node> ListaFechada) { if (filaPrioridadeContem(minHeap, filho)) { return(false); } if (listaFechadaContem(ListaFechada, filho)) { return(false); } return(true); }
public bool filaPrioridadeContem(BinaryHeapMin PriorityQueue, Node child) { foreach (Node x in PriorityQueue.heapArray) { int[,] arrayStateLista = x.stateMatrix; int[,] arrayNodeState = child.stateMatrix; if (Equals(arrayStateLista, arrayNodeState)) { return(true); } } return(false); }
public void resolver() { //Grafo = new Graph(controlePai, chaveAtual++, cordEmptyX, cordEmptyY, MatrixInitial); chaveAtual = Grafo.nodeRaiz.key + 1; // chaveAtual++; controlePai = Grafo.nodeRaiz.keyFather; rowEmptyY = Grafo.nodeRaiz.coordinateY; colEmpty = Grafo.nodeRaiz.coordinateX; //ver questão da lista de preferencia e comparação BinaryHeapMin minHeap = new BinaryHeapMin(10); minHeap.insert(Grafo.nodeRaiz); //Queue<Node> PriorityLista = new Queue<Node>(); //PriorityLista.Enqueue(Grafo.nodeRaiz); List <Node> ListaFechada = new List <Node>(); //int c = 0; int depth = 0; bool isGoal = false; Node node = new Node(); node = minHeap.getMinRoot(); //node = PriorityLista.Dequeue(); while (validadorContinuidade(node))//!ValidadordeEstados(node.stateMatrix) { ListaFechada.Add(node); List <Node> Sucessores = new List <Node>(); expandirSubjacentes(controlePai, node);//deveria receber sucessor,como? Node filho = node.filho; if (filho != null) { while (filho.irmao != null) { filho = filho.irmao; isGoal = validadorContinuidade(filho); if (isGoal) { if (validadorContinuidadeFila(filho, minHeap, ListaFechada)) { minHeap.insert(filho); } } } if (filho.irmao != null) { isGoal = validadorContinuidade(filho); if (isGoal) { if (validadorContinuidadeFila(filho, minHeap, ListaFechada)) { minHeap.insert(filho); } } } } if (isGoal == true) { node = minHeap.getMinRoot(); } else { break; } //foreach (Node child in Sucessores) //{ // if (ValidadordeEstados(child.stateMatrix)) // { // //TODO // break; // } // if(filaPrioridadeContem(minHeap, child)) // { // continue; // } // if (listaFechadaContem(ListaFechada,child)) { // continue; // } // minHeap.insert(child); //} } ///////vereficarPossibilidades() }