Neo4j - apoc.algo.dijkstra - 从 a 到 b 的最短路径,但通过 c、d、e 等

Neo4j - apoc.algo.dijkstra - shortest path from a to b, but via c, d, e etc

您好,我正在尝试使用 neo4j 进行路由,但我正在努力适应 apoc.algo.dijkstra。我不只是想从 A 到 B,而是实际上是从 A 通过 C 到 B,同时考虑 link.

的权重

A-B 查询是...

MATCH  (startNode:road_node {id:'59030214550942348742a27d'}), (endNode:road_node {id:'59030215550942348742a610'})
call apoc.algo.dijkstra(startNode, endNode, 'ROADLINK', 'min_travel_time') YIELD path, weight
return path, weight/60

我尝试了几种通过 c 包含 a 的方法,但无法使其正常工作...例如

MATCH  (startNode:road_node {id:'59030214550942348742a27d'}), (endNode:road_node {id:'59030215550942348742a610'})
call apoc.algo.dijkstra(startNode, endNode, 'ROADLINK', 'min_travel_time') 
with path, weight
MATCH (startNode)-[*]-(via:road_node {id:'59030215550942348742a666'})-[*]-(endNode)
return path, weight

关于如何通过 C 从 A 路由到 B 的任何想法或建议,同时考虑 links 的权重,将非常有帮助。

您可以调用 Dijkstra 算法两次,在第一次调用中使用 via 作为结束节点,然后在第二次调用中作为起始节点。结果将有2个子路径和2个子权重(除以60)。

MATCH (start:road_node {id:'59030214550942348742a27d'}), (end:road_node {id:'59030215550942348742a610'}), (via:road_node {id:'59030215550942348742a666'})
CALL apoc.algo.dijkstra(start, via, 'ROADLINK', 'min_travel_time') YIELD path, weight
WITH end, via, path AS p1, weight/60 AS w1
CALL apoc.algo.dijkstra(via, end, 'ROADLINK', 'min_travel_time') YIELD path, weight
return p1, path AS p2, w1, weight/60 AS w2;