SoloCodigo

Programación Específica => Otros temas específicos => Programación Lógica => Mensaje iniciado por: Hasto en Martes 16 de Agosto de 2005, 18:36

Título: Problema Del Viajero En Prolog (urgente)
Publicado por: Hasto en Martes 16 de Agosto de 2005, 18:36
Hola a todos, tengo aquí un pequeño problema con el código del viajero, para aquellos que no lo conocen, es el hecho de pasar por todos los nodos de un grafo "con el menor costo" o distancia, según lo quieras ver. La cuestión es la siguietne:
Hasta ahora solo he podido hacer que parta de un nodo y regrese al mismo pero no pasa por todos los nodos, estos tienen dobles caminos, es decir, que se puede ir y regresar con cualquier conexión, por ejemplo:
NODO1<---------------->NODO2
Lo que necesito, es únicamente poder desplegar todos los nodos en la ruta, aunque se repitan algunos, pero que estén todos los nodos, espero alguien me pueda ayudar, este es el código que tengo y el ejemplo de como usarlo:

%BASE DE CONOCIMIENTO
conect(gdl,mty,800).
conect(mty,mex,1000).
conect(gdl,mex,500).
conect(mex,oax,600).
conect(tij,gdl,2000).
conect(ver,oax,400).
conect(mex,ver,300).

conect(mty,gdl,800).
conect(mex,mty,1000).
conect(mex,gdl,500).
conect(oax,mex,600).
conect(gdl,tij,2000).
conect(oax,ver,400).
conect(ver,mex,300).


%MOTOR
existe(X,[X|Lista]).
existe(X,[_|R]):- existe(X,R).

trip(X,Y,C,Ruta):-trip(X,Y,C,Ruta,[]).
trip(X,Y,C,[X|[Y]],Ruta):-conect(X,Y,C),not existe(Y,Ruta).
trip(X,Y,C,[X|R],Ruta):-conect(X,Z,C1),not existe(Z,Ruta),trip(Z,Y,C2,R,[Z|Ruta]),C is C1+C2.

%ejemplo:
%trip(gdl,gdl,Dinero,Ruta)