我的问题是:是否可以使用Cypher实现Dijkstra的算法?关于neo4j网站的解释只讨论REST API,对于像我这样的初学者来说很难理解
请注意,我想在两个节点之间找到最短距离的最短路径,而不是两个节点之间的最短路径(涉及最少数量的关系)。我知道使用Cypher很容易实现的shortestPath算法,但它不符合我的目的。
如果我有一个包含节点的图形数据库,以及具有属性“距离”的节点之间的关系,请指导我如何继续。我想要的只是编写一个代码,借助它我们将能够找到数据库中两个节点之间的最短距离。或者如果我需要改变我的方法并使用其他程序的任何提示?
答案 0 :(得分:6)
在这种情况下,您可以实现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
答案 1 :(得分:1)
不,除非你使用交易并且基本上重写了algorhythm,否则它不可能以合理的方式进行。 之前的答案是错误的,因为allShortestPaths子集不会返回更长但更便宜的路径。您将过滤已选择的路径子集,而不考虑关系成本。