Académique Documents
Professionnel Documents
Culture Documents
raz = nuevoNodo(problema.inicial, problema.final) //El primer lmite-f es el coste-f del nodo raz. lmite-f = coste-f(raz) bucle hacer solucin, lmite-f = Contorno-DFS(raiz, lmite-f) si no EsVacia(solucin) responde con solucin si lmite-f CosteMaximo responde con ERROR finbucle funcin Contorno-DFS(nodoexp, lmite-f) responde con lista solucin, nuevo coste-f Entradas: nodo nodoexp : el nodo a expandir coste lmite-f : lmite actual de coste de f Variables: coste siguiente-f : lmite de coste-f correspondiente al siguiente contorno. Se inicializa con valor CosteMximo. // Si el coste de este nodo es mayor que el lmite actual, devolvemos su coste. si coste-f(nodoexp) > lmite-f responde con nulo, coste-f(nodoexp) // Si es un nodo meta, respondemos con una lista inicializada con el nodo. si EsMeta(nodoexp) responde con lista(nodoexp), lmite-f // En otro caso expandimos el nodo. para cada operador op //Si existe un sucesor de nodoexp con el operador op si suc = sucesor(nodoexp, op) //hacemos una llamada recursiva a Contorno-DFS (solucin, nueva-f ) = Contorno-DFS(suc, lmite-f) // Al retorno de Contorno-DFS, si tenemos solucin, aadimos a la lista //el nodo actual. si no EsVacia(solucin) InsertarLista(solucin, nodoexp) responde con solucin, lmite-f finsi // Si no hay solucin comprobamos el valor de nueva-f, y si es menor // que siguiente-f lo almacenamos como valor provisional de limite-f para // la prxima iteracin del algoritmo. siguiente-f = Minimo(siguiente-f, nueva-f) finsi //Si an quedan operadores por comprobar continuamos iterando (bucle 'para') finpara // Si llegamos hasta aqu es que desde el nodo nodoexp no se llega a una solucin // de coste menor o igual que lmite-f. Retornamos una lista vaca y el valor provisional // de lmite-f para la prxima iteracin. responde con nulo, siguiente-f