/* MTDO DE BUSQUEDA DE AMPLITUD */ /* ing. HORACIO ACOSTA N. */ %trace DATABASE nodo(symbol,symbol) existe(symbol) PREDICATES amplitud enlace(symbol,symbol) busca(symbol,symbol) addcola(symbol) elimin exito(symbol) GOAL amplitud, not(elimin); attribute(14),write("\n\nCualquier Tecla "), readchar(_). CLAUSES nodo(a,b). nodo(a,c). nodo(b,d). nodo(c,e). nodo(d,f). nodo(e,f). nodo(e,g). nodo(f,g). amplitud:- /*captura nodos*/ makewindow(4,14,113," METODO DE BUSQUEDA DE AMPLITUD",0,0,25,80), cursor(21,66), write("Esc. SALE"), cursor(0,0), write("Digite nodo raiz: "), readln(AA), upper_lower(AA,A), write("Digite nodo objetivo: "), readln(BB), upper_lower(BB,B), cursor(21,66), write(" "), cursor(1,0), enlace(A,B),nl. enlace(A,B):- busca(A,B), exito(B). enlace(_,_):- /*No se ha encontrado nodo */ nl, attribute(131), write("NODO NO ENLAZADO EN EL ARBOL"), elimin. %elimina nodos de cola. busca(N0,N1):- /*N1 = Nodo Objetivo ?*/ nodo(N0,N1), addcola(N0). busca(N0,N1):- nodo(N0,NN), /* ¨ Hijos en el mismo nivel ? */ nodo(NN,N1), /* Busca hijo para NN */ addcola(N0), addcola(NN), fail. busca(N0,N1):- /*Si no es N1 => hijos de N0 ?*/ nodo(N0,NN), NN<>N1, %Si Nuevo Nodo es difrente de objetivo addcola(N0), %si retorna fallo, toma otro hijo del nodo existente busca(NN,N1). %busca si objetivo existe en el nuevo hijo-^. addcola(N0):- not(existe(N0)), %Si no existe en la cola assert(existe(N0)),/*cola,*/!. %lo adiciona y sale. addcola(_) /*, cola*/. %Si existe, retorna fallo. elimin:- retract(existe(_)), %elimina nodo existente fail, %lee la siguiente posici¢n de la cola !. exito(B):- % Encontr¢ Nodo Objetivo nl,attribute(15), write("Nodo ", B, " encontrado"),nl,nl, attribute(14), write("Pulse una tecla"), readchar (_), !.