我正在尝试编写一种算法,它将值从起始节点传播到整个连接的组件。基本上,如果 A 收到 5 个请求,并且 A 收到每个请求后向 B 发送 5 个请求,那么 B 将收到 25 个请求。
所以基本上,我正试图从这里开始
对此
我在 neo4j 中编写了以下代码片段:
MATCH (a:Loc)-[r:ROAD]->(b:Loc)
SET b.volume = b.volume + a.volume * r.cost
RETURN a,r,b
但是,我不知道我应该如何指定该算法的起点以开始?在这种情况下,neo4j 似乎正在正确更新值,但我认为这不适用于更大的图形。我想明确地让算法从 START 节点开始传播值。
谢谢。
最佳答案
我相信会有更好的答案,而且这种方法有一些局限性,因为对图表做了一些假设,但这适用于您的示例。
请注意,我向 :Loc
节点添加了一个 id
属性,但我只用它来选择开始(以及打印节点 id
最后)。
MATCH p=(n:Loc)<-[:ROAD*]-(:Loc {id: 0})
WITH DISTINCT n, max(length(p)) as maxLp
ORDER BY maxLp // order the nodes by their maximum distance from start
MATCH (n)<-[r:ROAD]-(p:Loc)
SET n.volume = n.volume + r.cost * p.volume
RETURN DISTINCT n.id, n.volume
结果如下:
n.id n.volume
1 4000
2 200000
3 200000
4 16400000
5 508000000
6 21632000000
这里的想法是获取从起始节点到每个节点的最长路径。这些按“接近”排序,然后按“接近”顺序更新卷。
关于algorithm - 在neo4j中指定图形遍历算法的起点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54545144/