尊敬的先生/女士,
我创建了下面给出输入列表的图表。在找到F和I之间的路径时,通过H,它将进入无限循环。我没有得到理想的道路。它还包含循环路径。我还没有从任何其他网站得到答案。所以我在这里发布这个问题。
代码:
create (A:_schema_A)
create (B:_schema_B)
create (C:_schema_C)
create (D:_schema_D)
create (E:_schema_E)
create (F:_schema_F)
create (G:_schema_G)
create (H:_schema_H)
create (I:_schema_I)
create (J:_schema_J)
CREATE (A)-[:HAS]->(B)
CREATE (A)-[:HAS]->(C)
CREATE (A)-[:HAS]->(D)
CREATE (B)-[:HAS]->(D)
CREATE (B)-[:HAS]->(E)
CREATE (C)-[:HAS]->(D)
CREATE (C)-[:HAS]->(F)
CREATE (D)-[:HAS]->(E)
CREATE (D)-[:HAS]->(F)
CREATE (D)-[:HAS]->(G)
CREATE (E)-[:HAS]->(G)
CREATE (E)-[:HAS]->(H)
CREATE (F)-[:HAS]->(G)
CREATE (F)-[:HAS]->(I)
CREATE (G)-[:HAS]->(H)
CREATE (G)-[:HAS]->(I)
CREATE (G)-[:HAS]->(J)
CREATE (H)-[:HAS]->(B)
CREATE (H)-[:HAS]->(J)
CREATE (I)-[:HAS]->(C)
CREATE (I)-[:HAS]->(J)
RETURN A;
感谢!!!
答案 0 :(得分:2)
如果您正在寻找从F开始的最短路径,从I结束,但经过H,您可以查找:
(a) The shortest path(s) from F to H, and
(b) The shortest path(s) from H to I.
通过将(a)中的任何路径与(b)中的任何路径组合,您最终得到(最短路径)一条路径。
这是找到(a)和(b)的基本解决方案:
MATCH (F:_schema_F),(H:_schema_H),(I:_schema_I)
RETURN allShortestPaths((F)-->(H)), allShortestPaths((H)-->(I))
如果你有一个大图,你需要限制评估路径的长度,以避免长时间运行(或“永远”)。例如,要将搜索到的路径长度限制为6个关系,上面的查询将如下所示:
MATCH (F:_schema_F),(H:_schema_H),(I:_schema_I)
RETURN allShortestPaths((F)-[*..6]->(H)), allShortestPaths((H)-[*..6]->(I))
Here is a console显示后一个查询的结果。 (a)只有一条路径[有2个关系]。 (b)有3条路径[有4种关系]。