bool BusquedaA::ejecutarBusqueda() { nodoInicial->setHeuristica(calcularHeuristicaAdmisible(nodoInicial)); cola<<nodoInicial; Nodo* nodoMenor; while(!cola.empty()) { int idxMenor = getIndiceNodoFMenor(cola); // obtiene el indice del nodo con menor f en la cola de prioridad nodoMenor = cola.at(idxMenor); // obtiene el nodo de con menor f de la cola de prioridad cola.removeAt(idxMenor); // elimina el nodo de menor f de la cola nodosExpandidos<<nodoMenor; // añade el nodo con menor f a los nodos expandidos cantidadNodosExpandidos++; if(nodoMenor->esMeta()){ // se verifica si es meta nodoSolucion = nodoMenor; // como es meta se asigna a nodoSolucion el nodo solucion return true; }else{ QList <Nodo*> nodosExpandidos = nodoMenor->expandir(); Nodo* nodoExp; foreach (nodoExp, nodosExpandidos) { if(!esCiclo(nodoExp)){ cola<<nodoExp; cantidadNodosCreados++; nodoExp->setHeuristica(calcularHeuristicaAdmisible(nodoExp)); if(nodoExp->getProfundidad() > profundidadArbol){ profundidadArbol = nodoExp->getProfundidad(); } }else{ delete nodoExp; // elimina solo los nodos que representan un ciclo en el arbol nodoExp = 0; } } } } return false; }
bool BusquedaAmplitud::ejecutarBusqueda() { cola<<nodoInicial; while (!cola.empty()) { nodosExpandidos<<cola.first(); cola.pop_front(); cantidadNodosExpandidos++; if (nodosExpandidos.last()->esMeta()) { nodoSolucion=nodosExpandidos.last(); return true; }else { QList <Nodo*> nodosExpandidosTemporales = nodosExpandidos.last()->expandir(); Nodo *nodoExp; foreach (nodoExp, nodosExpandidosTemporales) { if(!esCiclo(nodoExp)){ cantidadNodosCreados++; cola<<nodoExp; if(nodoExp->getProfundidad() > profundidadArbol){ profundidadArbol = nodoExp->getProfundidad(); } }else{ delete nodoExp; nodoExp = 0; } } } } return false; }