问题是我必须找到所有最小权重和最大深度可以为 6 的路径(5 个顶点可以在中间)。两个顶点之间可以存在多个具有不同权重的关系。
例如路径:
weight(ABEF) = 2+3+1 = 6
或 2+2+1 = 5
如果我们在节点 B 和 E 之间选择不同的关系权重。
对于其他道路也是如此 - 由于不同的关系,相同节点之间可能存在不同的权重。
数据库巨大,计算深度 6 的所有可能性非常耗时:/
如何检查两个节点之间的所有关系权重,并且在同一搜索中不检查权重最大的关系,如果存在具有相同最小权重的关系,则将它们都取走?
到目前为止我已经:
START n=node(158371), m=node(183090)
MATCH p=n-[r*..4]-m
WITH p, length(p) as len,r
RETURN reduce(res=0, x in r: res + x.weight) as totalscore, len
ORDER BY totalscore desc;
但是如果我深度搜索 6 并找到所有可能性,数据库就会崩溃。减少函数的作用就像收集字符串,但我需要计算重量。 (2+3+1=6 而不是 2+3+1=231
)
P.s.如果图形图像不可见,则位于此处:http://postimg.org/image/bf9rfdtf7/
最佳答案
听起来像是需要 Dijkstra algorithm 解决的典型问题。不幸的是,我认为不存在 Cypher 语法,但 Neo4j if you didn't mind using Java 附带了一个实现。 ,或 REST API 。
关于neo4j - 如果两个节点之间存在很多关系,则使用 Neo4j 中的 cypher 查找所有权重最小的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18146707/