Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
bestTrack - bestTrack.pl

bestTrack.pl

Caricato da: Nophiq
Scarica il programma completo

  1. % Data una lista di liste ritorna la sottolista più corta
  2. % Questo programma l''ho utilizzato in un grafo per ricercare il percorso più breve (tra quelli possibili).
  3.  
  4. % Track mi indica tutti i percorsi (evitando le ripetizioni e cicli infiniti)
  5. % Per utilizzare questo programma bisogna definire prima tutti gli edge(a, b) ovvero tutti gli archi drl grafo; a e b sono i nodi.
  6.  
  7. track(X, X, [X], _).
  8. track(X, Y, [X, Y], _) :- edge(X, Y).
  9. track(X, Y, [X|Path], V) :-
  10.         edge(X, Z),
  11.         not(member(Z, V)),
  12.         track(Z, Y, Path, [X|V]).
  13.  
  14. % È il funtore da richiamare secondo questa sintassi
  15. % ?- bestTrack(nodoIniziale, nodoFinale, L, []).
  16. % L''unica variabile è L
  17.  
  18. bestTrack(X, Y, L, V) :-
  19.         findall(A, track(X, Y, A, V), L1),
  20.         scorriLista(L1, L, _).
  21.  
  22. scorriLista([M], L, C) :-
  23.         L = M,
  24.         length(M, C).
  25.        
  26. scorriLista([M1|T], L, C) :-
  27.         length(M1, C1),
  28.         scorriLista(T, M2, C2),
  29.         newShortest(M1, C1, M2, C2, L, C).
  30.        
  31. % Mi indica la lista più corta
  32.  
  33. newShortest(_, N1, M, N, L, C) :-
  34.         N1>N,
  35.         L = M,
  36.         C = N.
  37. newShortest(L1, N1, _, N, L, C) :-
  38.         N >= N1,
  39.         L = L1,
  40.         C = N1.