Jor*_*dez 2 algorithm graph neo4j graph-algorithm cypher
我正在使用图表,最近知道neo4j.
neo4j能帮我找到通过图中给定节点的所有简单循环吗?
通过实施Johnson算法的修改,我已经可以在java
/ python
code中执行此操作.
这只是我创建的图表的一个示例,是可以在neo4j数据库上执行的Cypher代码:
CREATE (John:Person { name : '@john',facebook: 'facebook.com/john'})
CREATE (Josh:Person { name : '@josh',facebook: 'facebook.com/josh'})
CREATE (Dan:Person { name : '@dan',facebook: 'facebook.com/dan'})
CREATE (Kenny:Person { name : '@kenny',facebook: 'facebook.com/kenny'})
CREATE (Bart:Person { name : '@bart',facebook: 'facebook.com/bart'})
CREATE (Mike:Person { name : '@mike',facebook: 'facebook.com/mike'})
CREATE (Jenny:Person { name : '@jenny',facebook: 'facebook.com/jenny'})
CREATE (Frank:Person { name : '@frank',facebook: 'facebook.com/frank'})
CREATE (Erick:Person { name : '@erick',facebook: 'facebook.com/erick'})
CREATE (Lynda:Person { name : '@lynda',facebook: 'facebook.com/lynda'})
CREATE (Lynda)-[:KNOWS]-> (Josh)
CREATE (Lynda)-[:KNOWS]-> (Frank)
CREATE (Lynda)-[:KNOWS]-> (Bart)
CREATE (Josh)-[:KNOWS]-> (Erick)
CREATE (Josh)-[:KNOWS]-> (Jenny)
CREATE (Josh)-[:KNOWS]-> (Dan)
CREATE (Dan)-[:KNOWS]-> (Lynda)
CREATE (Dan)-[:KNOWS]-> (Josh)
CREATE (Dan)-[:KNOWS]-> (Mike)
CREATE (Dan)-[:KNOWS]-> (Kenny)
CREATE (Mike)-[:KNOWS]-> (Kenny)
CREATE (Kenny)-[:KNOWS]-> (Bart)
CREATE (Bart)-[:KNOWS]-> (Josh)
CREATE (Frank)-[:KNOWS]-> (Erick)
CREATE (Erick)-[:KNOWS]-> (Frank)
Run Code Online (Sandbox Code Playgroud)
......这些都是图表中的所有周期:
Josh->Dan->Lynda->Josh
Josh->Dan->Lynda->Bart->Josh
Josh->Dan->Josh
Josh->Dan->Mike->Kenny->Bart->Josh
Josh->Dan->Kenny->Bart->Josh
Run Code Online (Sandbox Code Playgroud)
这里列出了简单的测试用例:
1- input: Josh
output (all the cycles):
Josh->Dan->Lynda->Josh
Josh->Dan->Lynda->Bart->Josh
Josh->Dan->Josh
Josh->Dan->Mike->Kenny->Bart->Josh
Josh->Dan->Kenny->Bart->Josh
2- input: Lynda
output:
Josh->Dan->Lynda->Josh
Josh->Dan->Lynda->Bart->Josh
Run Code Online (Sandbox Code Playgroud)
您可以使用以下查询在Cypher中执行此操作:
MATCH p=(n)-[*]->(n) RETURN nodes(p)
Run Code Online (Sandbox Code Playgroud)
查询的文本表示是:
找到开始节点和结束节点相同的路径,完整路径具有传出方向
请注意,对于中/大图,这是一个昂贵的查询,您可以限制路径的深度,例如:
MATCH p=(n)-[*1..15]->(n) RETURN nodes(p)
Run Code Online (Sandbox Code Playgroud)
也许您还希望最小深度为2,因为与自身有关系的节点将返回深度为1 ;-)
归档时间: |
|
查看次数: |
599 次 |
最近记录: |