Area Code - My place . . . Myself . . .

9/29/2007

Árboles en Prolog.

Un árbol n-ario es un árbol donde cada nodo puede tener cero
ó más descendientes.

Dado un árbol de este tipo, cuyas aristas tendrán un costo
asociado, se pretende desarrollar un predicado en Prolog que
permita obtener un camino valido desde la raíz hasta un nodo hoja
y el costo total asociado al mismo.

Por ejemplo:

En este árbol el camino desde el nodo raíz ‘a’ hasta el nodo
‘k’ tiene un costo de 3+6+2=11.

Para representar el árbol se utilizará siguiente consulta:

camino(arbol(a,[arbol(b,[arbol(e,[arbol(k,[],[])],[2]),arbol(f,[],[])],[6,5]),
arbol(c,[arbol(g,[],[]),arbol(h,[],[])],[3,5]),arbol(d,[arbol(i,[],[]),
arbol(j,[],[])],[3,3])],[3,2,4]),L,C).



Codigo del programa:


%
% Rutas y Costos.
%

camino(arbol(Raiz, [], []), [Raiz], 0).
camino(arbol(Raiz, Hijos, Costos), [Raiz|L], CostoTotal):-
hijo(Hijos, Costos, Hijo, CostoHijo),
camino(Hijo, L, CostoL),
CostoTotal is CostoHijo + CostoL.
hijo([Hijo|_], [Costo|_], Hijo, Costo).
hijo([_|Hs], [_|Cs], Hijo, Costo):- hijo(Hs, Cs, Hijo, Costo).