Найти обмен в автобусных маршрутах с помощью neo4j - PullRequest
0 голосов
/ 22 января 2019

enter image description here См. Скриншот - кратчайший путь от А до D

У меня есть один график с множеством узлов, представляющих остановки автобусов.Есть автобусы, которые связаны с автобусными остановками.Я могу найти кратчайший путь (направление отсчета) от А до G, как расстояние, как вес.Теперь мне нужно найти комбинации доступных автобусов, которые могут помочь пользователю добраться до пункта назначения.

1) Я могу найти общий автобус, если он существует.

2) Как программно найти межшкольные автобусы

Пример - от A (источник) до G (пункт назначения)

A --------> B ------> C------> D ----> E -----> F --------> G

Ниже приведены автобусы, доступные на каждой остановке автобуса -

Стоп. - ServiceNo (Автобусы).

A - 120 147 196 197 167 961 961C

B - 12,2,2A, 121,122,124,147,166,174,196,197,54,167,190,61,961,961C, 143

C - 12,12e, 2,2A, 121,122,124,147,166,174,174e, 196,197,54, CT18, CT8,167, 190,61,961,961C, 143

D - 124,147,147e, 166,197,61,961,961C, 143

E - 12,12e, 22A, 197,33,63,80, CT18, CT8,61,961,961C, 970,143

F - 12,12e, 2,2A, 174,174e, 197,33,51,63,80,61,961,961C

G - 174 174e, 186, 51,143

Узлы на графике содержат информацию об автобусах для каждого маршрута. Так как я могу узнать автобусы (если прямой автобус недоступен), чтобы добраться от A до G?

1) A -> F (на 961 961C), затем F -> G (на 174 или 174e).

2) A ---> D на (197,147,961), затем D -> F (на 961 или 961C), а затем F -> G (на 174 или 174e) и т. Д.

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

Есть ли какой-нибудь шифровальный запрос для выполнения этой задачи.

Я должен найти 4 лучших решения с минимальным количеством обменов.

1 Ответ

0 голосов
/ 22 января 2019

Поскольку остановки для каждой услуги не упорядочены и мы не можем определить расстояния между остановками, вы можете моделировать задачу тривиально, создав :Stop узлы A, B, C, D, E,F, G и связать их с соответствующими :Service узлами.

Вот так (представляет только остановки A, B, C и сервисы 147, 196, 12):

partial graph

Затем вы можете использовать одну из функций поиска пути , чтобы получить результат.Для одного кратчайшего пути из B в C вы могли бы сделать

MATCH (start:Stop{name:'B'}), (end:Stop{name:'C'})
CALL algo.shortestPath.stream(start, end)
YIELD nodeId, cost
RETURN algo.getNodeById(nodeId).name AS name

Надеемся, что это приведет вас на правильный путь.

РЕДАКТИРОВАТЬ: только для проверки, доступен ли прямой маршрут, или нет,Вы можете запросить:

MATCH (start:Stop {name:"A"})-[]-(bus:Service)-[]-(end:Stop {name:"B"}) RETURN bus

This should return two result nodes
> (:Service {number: 196})
> (:Service {number: 12})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...