neo4j - 如何使用 Cypher 在 Neo4j 中实现 Dijkstra 算法

标签 neo4j cypher dijkstra

我的问题是:是否可以使用 Cypher 实现 Dijkstra 算法? neo4j网站上的解释只讲了REST API,对于我这样的初学者来说很难理解

请注意,我想找到最短的最短路径距离两个节点之间,而不是两个节点之间的最短路径(涉及最少数量的关系)。我知道使用 Cypher 很容易实现的 shortestPath 算法,但它不符合我的目的。

如果我有一个带有节点的图形数据库,以及具有“距离”属性的节点之间的关系,请指导我如何进行。我想要的只是编写一个代码,借助它我们将能够找出数据库中两个节点之间的最短距离。或者如果我需要改变我的方法并为此使用其他程序有什么提示吗?

最佳答案

在这种情况下,您可以实现 allShortestPaths,根据关系的距离属性按升序对路径进行排序,并仅返回一个,根据您的上一篇文章,它会是这样的:

MATCH (from: Location {LocationName:"x"}), (to: Location {LocationName:"y"}) , 
paths = allShortestPaths((from)-[:CONNECTED_TO*]->(to))
WITH REDUCE(dist = 0, rel in rels(paths) | dist + rel.distance) AS distance, paths
RETURN paths, distance
ORDER BY distance
LIMIT 1

关于neo4j - 如何使用 Cypher 在 Neo4j 中实现 Dijkstra 算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27361239/

相关文章:

Neo4j cypher - 导入 CSV 并根据 csv 值添加节点之间的关系

neo4j - 在一次密码查询中获取总计数和分页结果(neo4j)

neo4j - 有没有办法检查值是否为日期并在 Neo4j 中返回?

algorithm - Dijkstra算法是线性时间吗?

algorithm - 基于距离和约会时间的约会地点路线

algorithm - 来自多个集合的最短路径

scala - Spark/Neo4j引发错误: RuntimeException: java. util.Collections $ UnmodifiableRandomAccessList不是字符串架构的有效外部类型

java - 如何连接 - 断开连接 - 重新连接到 Neo4j 服务器实例

python - 如何使用 python Rest api 在 neo4j 中获取密码查询的响应

java - Neo4j - Java 堆空间。错误的查询或设置?