以最大跳数在Neo4j中实现Dijkstra算法

时间:2019-02-28 10:55:00

标签: neo4j cypher neo4j-apoc

我有简单的加权图。 我知道如何找到最短路线(就啤酒花而言),也知道如何按重量找到最短路线。 我需要找到按重量计的最短路径,但我还需要限制允许的跳数。 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

现在代码返回:

results

我需要做的是:我需要以最大3跳从A到F。因此,我实际上只需要结果中的第三行,前两个对我来说并不重要,因为它们都有4个跃点。

0 个答案:

没有答案