10

我正在处理一个必须处理图表的项目......我正在使用图表来获取两个站点之间的公共汽车和自行车路线。

事实是,我所有的关系都包含从关系的起点到终点所需的时间。

为了获得到节点之间的最短路径,我使用了 cypher 的最短路径功能。但是有一点,最短的路径并不是最快的......

有没有办法让两个节点之间没有通过关系链接的所有路径?

谢谢

编辑:

事实上,我改变了我的图表,使它更容易。所以我仍然拥有所有节点。现在关系类型对应于从一个节点到另一个节点所需的时间。

cypher 的 shortestPath 函数给出了包含较少关系的路径。我希望它返回所有类型(时间)的加法最小的路径。这可能吗?

谢谢

4

2 回答 2

11

在 cypher 中,要获取两个节点之间没有通过关系链接的所有路径,并按权重的总和排序,可以使用 1.9 中引入的 reduce 函数:

start a=node(...), b=node(...) // get your start nodes
match p=a-[r*2..5]->b // match paths (best to provide maximum lengths to prevent queries from running away)
where not(a-->b) // where a is not directly connected to b
with p, relationships(p) as rcoll // just for readability, alias rcoll
return p, reduce(totalTime=0, x in rcoll: totalTime + x.time) as totalTime
order by totalTime

如果你只需要最短的,你可以在最后抛出一个限制 1。

于 2013-02-11T17:12:47.063 回答
4

您可以使用 Dijkstra/Astar 算法,这似乎非常适合您。看看http://api.neo4j.org/1.8.1/org/neo4j/graphalgo/GraphAlgoFactory.html

不幸的是,您不能使用 Cypher 中的那些。

于 2013-02-11T14:47:31.913 回答