Apoc Dijkstra 在计算最短路径时双向遍历
Apoc Dijkstra traversing in both directions while computing shortest path
我一直在尝试使用 neo4j 及其 apoc 进程库来获得 2 个节点之间的最短路径。
例如我创建了 2 个节点如下
CREATE (:Point {title:'A'})
CREATE (:Point {title:'B'})
然后我就这样确立他们的关系
MATCH (u1:Point {title:'A'}), (u2:Point {title: 'B'})
CREATE (u1)-[:distance {value:10}]->(u2)
现在我已经建立了从 A 到 B 的定向关系,而不是相反。
所以当我如下调用 apoc Dijkstra
MATCH (start:Point {title: 'B'}), (end:Point {title: 'B'})
CALL apoc.algo.dijkstra(start, end, 'distance', 'value') YIELD path, weight
RETURN path, weight
我不应该得到任何结果,因为它们不是从 B 到 A 的定向路径。但是我得到的结果与我 运行 使用从 A 到 B 的路径进行查询时得到的结果相同。
谁能告诉我为什么会这样?为什么Dijkstra无视方向?任何帮助将不胜感激。
您需要在查询中的关系类型中添加 >
或 <
。
MATCH (start:Point {title: 'B'}), (end:Point {title: 'B'})
CALL apoc.algo.dijkstra(start, end, 'distance>', 'value') YIELD path, weight
RETURN path, weight
我一直在尝试使用 neo4j 及其 apoc 进程库来获得 2 个节点之间的最短路径。
例如我创建了 2 个节点如下
CREATE (:Point {title:'A'})
CREATE (:Point {title:'B'})
然后我就这样确立他们的关系
MATCH (u1:Point {title:'A'}), (u2:Point {title: 'B'})
CREATE (u1)-[:distance {value:10}]->(u2)
现在我已经建立了从 A 到 B 的定向关系,而不是相反。 所以当我如下调用 apoc Dijkstra
MATCH (start:Point {title: 'B'}), (end:Point {title: 'B'})
CALL apoc.algo.dijkstra(start, end, 'distance', 'value') YIELD path, weight
RETURN path, weight
我不应该得到任何结果,因为它们不是从 B 到 A 的定向路径。但是我得到的结果与我 运行 使用从 A 到 B 的路径进行查询时得到的结果相同。
谁能告诉我为什么会这样?为什么Dijkstra无视方向?任何帮助将不胜感激。
您需要在查询中的关系类型中添加 >
或 <
。
MATCH (start:Point {title: 'B'}), (end:Point {title: 'B'})
CALL apoc.algo.dijkstra(start, end, 'distance>', 'value') YIELD path, weight
RETURN path, weight