Длинейший путь графа - Prolog
Формулировка задачи:
Здраствуйте, помогите пожалуйста.
Нужно найти самый длиный простой путь в графе.
Написал программку которая ищет всет простые пути. Как найти только самый большой?
Листинг программы
- domains
- i=integer
- s=char
- list=s*
- database arca(s,s)
- predicates
- add(list,char,list)
- posled(char,list)
- poisk(list,list)
- member(s,list)
- clauses
- posled(H,[_|T]):-posled(H,T).
- posled(H,[H]).
- add([H|T],X,[H|Res]):-add(T,X,Res).
- add([],X,[X]).
- poisk([],A):-arca(X,Y),poisk([X,Y],A).
- 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),!.
- poisk(A,A).
- arca('a','b').arca('b','c').arca('c','d').arca('b','d').arca('a','d').arca('d','a').
- member(X,[X|_]):-!.
- member(X,[_|Tail]):- member(X,Tail).
Решение задачи: «Длинейший путь графа»
textual
Листинг программы
- domains
- i=integer
- s=char
- list=s*
- database arca(s,s)
- predicates
- add(list,char,list)
- nondeterm posled(char,list)
- nondeterm poisk(list,list)
- member(s,list)
- length(list,i)
- nondeterm longer(i)
- nondeterm longest(list)
- clauses
- posled(H,[_|T]):-posled(H,T).
- posled(H,[H]).
- add([H|T],X,[H|Res]):-add(T,X,Res).
- add([],X,[X]).
- poisk([],A):-arca(X,Y),poisk([X,Y],A).
- 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),!.
- poisk(A,A).
- arca('a','b').arca('b','c').arca('c','d').arca('b','d').arca('a','d').arca('d','a').
- member(X,[X|_]):-!.
- member(X,[_|Tail]):- member(X,Tail).
- length([],0).
- length([_|Tail],N):-length(Tail,N1),N=N1+1.
- longer(N):-poisk([],Way), length(Way,Len),Len>N.
- longest(Way):-poisk([],Way),length(Way,Len),not(longer(Len)).
- goal
- longest(L).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д