Длинейший путь графа - Prolog

Узнай цену своей работы

Формулировка задачи:

Здраствуйте, помогите пожалуйста. Нужно найти самый длиный простой путь в графе. Написал программку которая ищет всет простые пути. Как найти только самый большой?
Листинг программы
  1. domains
  2. i=integer
  3. s=char
  4. list=s*
  5. database arca(s,s)
  6. predicates
  7. add(list,char,list)
  8. posled(char,list)
  9. poisk(list,list)
  10. member(s,list)
  11. clauses
  12. posled(H,[_|T]):-posled(H,T).
  13. posled(H,[H]).
  14. add([H|T],X,[H|Res]):-add(T,X,Res).
  15. add([],X,[X]).
  16. poisk([],A):-arca(X,Y),poisk([X,Y],A).
  17. poisk([H|T],A):-arca(X,Y),posled(Z,T),Z=X,not(member(Y,[H|T])),add([H|T],Y,K),poisk(K,A),!.
  18. poisk(A,A).
  19. arca('a','b').arca('b','c').arca('c','d').arca('b','d').arca('a','d').arca('d','a').
  20. member(X,[X|_]):-!.
  21. member(X,[_|Tail]):- member(X,Tail).

Решение задачи: «Длинейший путь графа»

textual
Листинг программы
  1. domains
  2. i=integer
  3. s=char
  4. list=s*
  5. database arca(s,s)
  6. predicates
  7. add(list,char,list)
  8. nondeterm posled(char,list)
  9. nondeterm poisk(list,list)
  10. member(s,list)
  11. length(list,i)
  12. nondeterm longer(i)
  13. nondeterm longest(list)
  14.  
  15. clauses
  16. posled(H,[_|T]):-posled(H,T).
  17. posled(H,[H]).
  18. add([H|T],X,[H|Res]):-add(T,X,Res).
  19. add([],X,[X]).
  20. poisk([],A):-arca(X,Y),poisk([X,Y],A).
  21. poisk([H|T],A):-arca(X,Y),posled(Z,T),Z=X,not(member(Y,[H|T])),add([H|T],Y,K),poisk(K,A),!.
  22. poisk(A,A).
  23. arca('a','b').arca('b','c').arca('c','d').arca('b','d').arca('a','d').arca('d','a').
  24. member(X,[X|_]):-!.
  25. member(X,[_|Tail]):- member(X,Tail).
  26.  
  27. length([],0).
  28. length([_|Tail],N):-length(Tail,N1),N=N1+1.
  29.  
  30. longer(N):-poisk([],Way), length(Way,Len),Len>N.
  31.  
  32. longest(Way):-poisk([],Way),length(Way,Len),not(longer(Len)).
  33.  
  34. goal
  35. longest(L).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.875 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы