2017-06-06 257 views
0

您好我正在嘗試使用neo4j進行路由,但我正在努力適應apoc.algo.dijkstra。我不是隻想從A到B,而是從C經過A到B,同時考慮到鏈接上的權重。Neo4j - apoc.algo.dijkstra - 從a到b,但通過c,d,e等的最短路徑

的AB查詢...

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包括的一些方法,但不能得到它的工作...例如

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的建議,同時考慮對鏈路權重進行計數,將會非常有幫助。

回答

1

您可以調用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; 
+0

非常整齊,謝謝。效果很好 – SAB

+0

太好了。請記住[接受](https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)最能幫助您解答問題的答案。 – cybersam

相關問題