С Новым годом! Форум программистов, компьютерный форум, киберфорум
Prolog
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
Аня_программист

Поиск самого короткого пути в графе

11.12.2013, 19:03. Показов 1956. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!
У меня есть маленькая проблема. Я студентка третьего курса, сделала и сдала уже все лабораторные работы по логическому программированию, но есть одна проблема (задача), которую я еще не сдала, и мне нужна ваша помощь! прокомментируйте, пожалуйста, каждую строчку кода... Задача на поиск самого короткого пути от одной вершины графа к другой. Пожалуйста, помогите! Зачет скоро !

Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
DOMAINS
node = integer
way = node*
lway= way*
 
PREDICATES
path(node,lway,way)
rebro(node,node)
go(node,way,way)
member(node,way)
reverse(way,way)
conc(way,way,way)
conc(lway,lway,lway)
 
 
clauses
 
rebro(1,2).rebro(2,1).
rebro(1,3).rebro(3,1).
rebro(1,4).rebro(4,1).
rebro(3,2).rebro(2,3).
rebro(4,2).rebro(2,4).
rebro(2,5).rebro(5,2).
 
path(Z,[[Z|Was]|_],[Z|Was]):-!.
path(Z,[[X|Was]|T],Sol):-
    findall(Y, go(X,Was,Y), TC),
    conc(T,TC,T1),!,
    path(Z,T1,Sol).    
 
go(X,T,[Y,X|T]):-
  rebro(X,Y),
  not(member(Y,T)).
 
member(X,[X|_]):-!.
member(X,[_|L]):-member(X,L).
 
conc([], L, L).
conc([H|T], L, [H|T1]):-
conc(T,L,T1).
 
reverse([],[]).
reverse([X|T],Z):-
reverse(T,S), conc(S,[X],Z).
GOAL
clearwindow,
A=1,Z=5,
path(Z,[[A]],Sol),reverse(Sol,Sol1),
write(Sol1),nl;
write("No go").
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.12.2013, 19:03
Ответы с готовыми решениями:

Поиск самого короткого маршрута
Добрый день! Помогите с реализацией программы, пожалуйста. Задание: Сетка дорог это граф с нагруженными ребрами: map(). Цифры -...

Поиск короткого пути в лабиринте
Знаю, что тема довольно избитая, но точно решения точно такой же задачи я не нашёл, а стоки горят... Мой код ищет все пути, а мне надо...

Поиск пути в графе
Помогите,кто может,пожалуйста,с написанием задачи(И как ее проверять)!Очень нужно до завтра сдать,а то мне будет хана!!В прологе разбераюсь...

4
 Аватар для Грымзик
2507 / 1483 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
11.12.2013, 21:48
Поиск в пространстве состояний (поиск по графам тоже сюда!)
только форум захламлять
0
Anna_programmer
12.12.2013, 22:08
Я понимаю. Но мне нужна помощь по даной конкретной задаче.. Люди, помогите девушке ) пожалуйста, напишите комментарии к программе. Умоляю...
 Аватар для Грымзик
2507 / 1483 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
12.12.2013, 22:31
arlat, вот думаю более яркого примера к нашей беседе и не подыскать
0
Заблокирован
13.12.2013, 04:56
Ссылки тут запрещены, и 99% ее выпилят, но тут: http://pro-prof.com/archives/1283 есть поиск в ширину с комментариями к каждой строчке. Поиск там только чуть иначе реализован - у тебя для каждого найденного узла хранится путь до него из стартовой вершины (список списков используется), поэтому когда ты находишь конечную вершину:
Prolog
1
path(Z,[[Z|Was]|_],[Z|Was]):-!.
остается только перевернуть соответствующий подсписок:
Prolog
1
reverse(Sol,Sol1),
В том варианте, что по ссылке, хранятся использованные дуги (их не много, хранится остов, пусть и не минимальный), пройденные вершины и непройденные вершины (в сумме их ровно столько, сколько в графе всего вершин) - это гораздо оптимальнее хранения путей для каждой вершины, в общем. (хранится N вершин + N дуг вместо N * N вершин)

По комментариям еще...
Code
1
2
3
4
5
6
7
8
9
10
member(X,[X|_]):-!.
member(X,[_|L]):-member(X,L).
 
conc([], L, L).
conc([H|T], L, [H|T1]):-
conc(T,L,T1).
 
reverse([],[]).
reverse([X|T],Z):-
reverse(T,S), conc(S,[X],Z).
Это стандартные предикаты, на других прологах они вообще встроены... только conc называется append. Комментарии к ним тоже можно найти в интернете, я гарантирую (я их тоже где-то написал). Если что-то конкретное не понятно (какая-то строчка) - пишите - подскажем. А так...комментировать как работает member тут точно никто не будет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.12.2013, 04:56
Помогаю со студенческими работами здесь

Поиск пути на графе на JIPrologConsole
Сеть дорог является графом, с весами ребер: map(). Цифры - расстояния между городами. Написать программу определения лучшего маршрута между...

Поиск пути в ориентированном графе
Вот как звучит сама задача. Дан список пар городов, между которыми есть авиарейсы. Найти два города, между которыми есть по крайней мере ...

Поиск кратчайшего пути в графе (нужны комментарии)
Доброго времени суток! Сделал программу, для поиска наикротчайшего пути в графе, основной метод нащёл в инете, но дописал свой предикат,...

Поиск кратчайшего пути в графе между вершинами
Добрый вечер подскажите, пожалуйста, я ищу кратчайший путь в графе: m(a, d). m(c, d). m(c, e). m(d, e). m(a, b). m(b, c). ...

Поиск самого короткого пути на графе по алгоритму Крускала
Здравствуйте. Не могу нигде найти рабочую реализацию данного алгоритма на паскале. Может кто поделиться ссылкой , или кодом?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru