Поиск в глубину или ширину (SWI Prolog)

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

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

Помогите решить задачу! Найти все пути из Москвы в Новосибирск, проходящие через Пермь. Нужно использовать SWI Prolog.
Граф имеет вид:
Листинг программы
  1. edge(moskva, nnovgorod).
  2. edge(moskva, samara).
  3. edge(nnovgorod, perm).
  4. edge(nnovgorod, ekaterinburg).
  5. edge(perm, ekaterinburg).
  6. edge(ekaterinburg, samara).
  7. %edge(samara,ekaterinburg).
  8. edge(ekaterinburg, novosib).
  9. edge(samara, novosib).

Решение задачи: «Поиск в глубину или ширину (SWI Prolog)»

textual
Листинг программы
  1. :- if(current_predicate(use_rendering/1)).
  2.     :- use_rendering(table, [header(go('откуда', 'куда'))]).
  3. :- endif.
  4.  
  5. /** <examples>
  6. ?- find_way(moskva, novosib, perm, Way).
  7. */
  8.  
  9. edge(moskva, nnovgorod).
  10. edge(moskva, samara).
  11. edge(nnovgorod, perm).
  12. edge(nnovgorod, ekaterinburg).
  13. edge(perm, ekaterinburg).
  14. edge(ekaterinburg, samara).
  15. edge(samara,ekaterinburg).
  16. edge(ekaterinburg, novosib).
  17. edge(samara, novosib).
  18.  
  19. find_way(From, To, Across, Way) :-
  20.     find_way(From, To, Across, no, [], Way0),
  21.     reverse(Way0, Way).
  22.  
  23. find_way(Point, To, _, yes, Track, [go(Point, To) | Track]) :-
  24.     edge(Point, To).
  25. find_way(From, To, Across, IsAcross, Track, Way) :-
  26.     edge(From, Point),
  27.     not( member(go(From, Point), Track) ),
  28.     ( Point = Across, IsAcross1 = yes ; Point \= Across, IsAcross1 = IsAcross ),
  29.     find_way(Point, To, Across, IsAcross1, [go(From, Point) | Track], Way).

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


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

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

14   голосов , оценка 4.286 из 5

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

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

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