Реализация алгоритма Дейкстры в Neo4j с максимальным количеством прыжков - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть простой взвешенный график.Я знаю, как найти кратчайший маршрут (с точки зрения прыжков), и я знаю, как найти кратчайший маршрут по весу.Мне нужно найти кратчайший маршрут по весу, но я также должен ограничить количество прыжков.Возможно ли это с neo4j?

Обновление

текущий набор данных:

MERGE (a:Loc {name:"A"})
MERGE (b:Loc {name:"B"})
MERGE (c:Loc {name:"C"})
MERGE (d:Loc {name:"D"})
MERGE (e:Loc {name:"E"})
MERGE (f:Loc {name:"F"})
MERGE (a)-[:ROAD {cost:50}]->(b)
MERGE (a)-[:ROAD {cost:50}]->(c)
MERGE (a)-[:ROAD {cost:100}]->(d)
MERGE (b)-[:ROAD {cost:40}]->(d)
MERGE (c)-[:ROAD {cost:40}]->(d)
MERGE (c)-[:ROAD {cost:80}]->(e)
MERGE (d)-[:ROAD {cost:30}]->(e)
MERGE (d)-[:ROAD {cost:80}]->(f)
MERGE (e)-[:ROAD {cost:40}]->(f);

Текущий код:

MATCH (start:Loc{name:'A'}), (end:Loc{name:'F'})
CALL algo.kShortestPaths.stream(start, end, 40, 'cost' ,{})
yield nodeIds, costs
RETURN [node in algo.getNodesById(nodeIds) | node.name] AS places,
       costs,
       reduce(acc = 0.0, cost in costs | acc + cost) AS totalCost

Rightтеперь код возвращает:

results

Что мне нужно сделать, так это: мне нужно добраться от A до F с максимум 3 прыжками.Поэтому мне действительно нужен только третий ряд из результатов, первые два для меня не важны, так как у них обоих по 4 прыжка.

...