Курсовая работа: Математические модели
Аналогично производиться проверка двух станций на соседство в списке.
соседние(Станция1,Станция2,[Станция1,Станция2|_]).
соседние(Станция1,Станция2,[_|Хвост]):-
соседние(Станция1,Станция2,Хвост).
Ненаправленность графа обеспечивается в поиске смежных станций, т.е. находим ветвь Станция1, Станция2 или Станция2, Станция1.
смежные_станции(Станция1,Станция2,Линия):- линия(Линия,Список),принадлежит(Станция1,Список),
принадлежит(Станция2,Список), соседние(Станция1,Станция2,Список);
линия(Линия,Список), принадлежит(Станция1,Список),
принадлежит(Станция2,Список), соседние(Станция2,Станция1,Список).
Пересадка с линии1 на линию 2 возможна, когда станция принадлежит обеим линиям.
пересадка(Станция,Линия1,Линия2):- линия(Линия1,Список1), линия (Линия2, Список2),
принадлежит(Станция,Список1),принадлежит(Станция,Список2), Линия1<>Линия2.
Осуществляем поиск возможного пути от начальной станции к конечной.
маршрут(Станция,Станция,[Станция],1,Линия,_) :- линия(Линия,Список),принадлежит(Станция,Список).
% путь с пересадкой
маршрут(Начало,Конец,[Начало,Начало2|Хвост],Остановки1,Линия,История) :-
линия(Линия,Список),линия(Новая_Линия,Новый_Список),
принадлежит(Начало,Список),принадлежит(Начало2,Новый_Список),
пересадка(Начало,Линия,Новая_Линия),Линия<>Новая_Линия,
смежные_станции(Начало,Начало2,_),
not(принадлежит(Начало2,История)),
маршрут(Начало2,Конец,[Начало2|Хвост],Остановки2,Новая_Линия, [Начало2|История]),
Остановки1=Остановки2+1.
% путь без пересадки
маршрут(Начало,Конец,[Начало,Начало2|Хвост] ,Остановки1, Линия, История) :-
линия(Линия,Список),линия(Новая_Линия,Новый_Список),
принадлежит(Начало,Список),принадлежит(Начало2,Новый_Список),
Линия=Новая_Линия,смежные_станции(Начало,Начало2,_),
not(принадлежит(Начало2,История)),