Новичок
Профиль
Группа: Участник
Сообщений: 2
Регистрация: 13.1.2010
Репутация: нет Всего: нет
|
День добрый! подскажите плиз как решить такую задачку. Найти путь в графе из нач. точки в конечную через заданный маршрут. Причем в заданном маршруте необязательно ветви могут связываться, например a,d и e,c. Дан граф. В нем: участок_дороги-это ветвь. выполнить_наряд - это путь из нач.точки в конеч.точку через заданный маршрут(участки дорог). Вот пример кода: | Код | DOMAINS список=symbol* PREDICATES nondeterm принадлежит(symbol,symbol,список) nondeterm схема_движения(список) %граф nondeterm путь(symbol,symbol,integer,список) nondeterm смежные(symbol,symbol,список) nondeterm путь1(symbol,список,список,integer,список) % nondeterm наряд(список) %участки дорог nondeterm участок_дороги(symbol,symbol) %участки дорог, которые необходимо очистить (Нач_пункт участка, Конеч_пункт участка) % nondeterm участок_дороги(список) %участки дорог, которые необходимо очистить (Нач_пункт участка, Конеч_пункт участка) % nondeterm выполнить_наряд(symbol,symbol,список) %(Нач_пункт участка, Конеч_пункт участка,наряд)
CLAUSES схема_движения([a,b, b,c, a,d, b,d, b,e, c,e, d,e, d,c, f,a]).%
участок_дороги(f,a). участок_дороги(a,b). участок_дороги(b,c). участок_дороги(a,d). участок_дороги(b,d). участок_дороги(b,e). участок_дороги(c,e). участок_дороги(d,e). участок_дороги(d,c).
принадлежит(Нач_пункт,Конеч_пункт,[Нач_пункт,Конеч_пункт|_]). %ф1 принадлежит(Нач_пункт,Конеч_пункт,[_,_|Хвост]):-принадлежит(Нач_пункт,Конеч_пункт,Хвост).%пр1
смежные(Нач_пункт,Конеч_пункт,Схема_движения):-принадлежит(Нач_пункт,Конеч_пункт,Схема_движения);принадлежит(Конеч_пункт,Нач_пункт,Схема_движения).%пр2
путь1(Нач_пункт_,[Нач_пункт_|Путь],_,_,Путь). %ф2 путь1(Нач_пункт_,[Конеч_пункт|Путь1],Схема_движения,Счетчик,Путь):-Счетчик>0,смежные(Нач_пункт,Конеч_пункт,Схема_движения), Счетчик1=Счетчик-1,not(принадлежит(Нач_пункт,Конеч_пункт,Путь1)), путь1(Нач_пункт_,[Нач_пункт,Нач_пункт,Конеч_пункт|Путь1],Схема_движения,Счетчик1,Путь).%пр3b
путь(Нач_пункт_,Конеч_пункт,Счетчик,Путь):-схема_движения(Схема_движения),путь1(Нач_пункт_,[Конеч_пункт],Схема_движения,Счетчик,Путь).
GOAL
путь(f,b,2,Путь).%находит путь из точки f в точку b с количеством пройденных ветвей небольше2х /*Путь=["f","a","a","b"] 1 Solution*/
|
%выполнить_наряд(f,b,[a,d,e,c]). % -как выполнить такой запрос: %вывести путь из f в b проходящий через маршрут [a,d,e,c]????? Подскажите пожалуйста как это сделать?
|