algorithm - 在neo4j中指定图形遍历算法的起点

标签 algorithm graph neo4j cypher

我正在尝试编写一种算法,它将值从起始节点传播到整个连接的组件。基本上,如果 A 收到 5 个请求,并且 A 收到每个请求后向 B 发送 5 个请求,那么 B 将收到 25 个请求。

所以基本上,我正试图从这里开始

enter image description here

对此

enter image description here

我在 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/

相关文章:

algorithm - 压缩唯一排序数字的序列

Graphviz/Dot - 如何用独特的颜色标记树中的所有叶子?

c - 使用递归时如何避免初始化变量?

neo4j - Neo4j 的水平可扩展性项目 Rassilon 处于什么状态?

java - Neo4J TokenStore Spring oauth2

java - neo4j java遍历返回多个路径而不是一个

javascript - 获得偏移之间最小距离的最佳方法

algorithm - 从A点到B点,只能向上和向右移动,有多少种可能的移动方式?

performance - 在 O(n) 时间内确定字符串与原始字符串匹配的旋转次数?

java - Java 中的 Knight's Tour(递归),使用 Graph 和 DFS