实施Dijkstra';Neo4j中最大跳数的s算法

实施Dijkstra';Neo4j中最大跳数的s算法,neo4j,cypher,neo4j-apoc,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"}) ME

我有一个简单的加权图。 我知道如何找到最短路线(以跳数为单位),我知道如何根据重量找到最短路线。 我需要找到最短的路线重量,但我也需要限制多少跳是允许的。 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
现在代码返回:


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

只需运行dijskra权重算法,如果路径比最大值长,就不要使用它。我想你问这个是因为你有一些性能问题,所以你想尽快退出algo。要做到这一点,你必须自己写procedure@logisima这是不可能的。假设最大跳数为3,我有4跳的路线,费用为7,我也有3跳但费用为9的路线。我现在Dijkstra返回4跳路由,但我需要3跳路由。您可以使用的结果,然后约束/排序/搜索可接受的跳数吗?@rickhg12hs kshortestpath需要X作为参数,然后只返回前X个结果。但是我不知道设置最大跳数的第一个匹配结果是否在X或X+1范围内。所以你不知道你的参数?