Поиск в глубину или ширину (SWI Prolog)
Формулировка задачи:
Помогите решить задачу!
Найти все пути из Москвы в Новосибирск, проходящие через Пермь.
Нужно использовать SWI Prolog.
Граф имеет вид:
Решение задачи: «Поиск в глубину или ширину (SWI Prolog)»
textual
Листинг программы
:- if(current_predicate(use_rendering/1)). :- use_rendering(table, [header(go('откуда', 'куда'))]). :- endif. /** <examples> ?- find_way(moskva, novosib, perm, Way). */ edge(moskva, nnovgorod). edge(moskva, samara). edge(nnovgorod, perm). edge(nnovgorod, ekaterinburg). edge(perm, ekaterinburg). edge(ekaterinburg, samara). edge(samara,ekaterinburg). edge(ekaterinburg, novosib). edge(samara, novosib). find_way(From, To, Across, Way) :- find_way(From, To, Across, no, [], Way0), reverse(Way0, Way). find_way(Point, To, _, yes, Track, [go(Point, To) | Track]) :- edge(Point, To). find_way(From, To, Across, IsAcross, Track, Way) :- edge(From, Point), not( member(go(From, Point), Track) ), ( Point = Across, IsAcross1 = yes ; Point \= Across, IsAcross1 = IsAcross ), find_way(Point, To, Across, IsAcross1, [go(From, Point) | Track], Way).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д