微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

源和多个目的地之间的最短路径

如何解决源和多个目的地之间的最短路径

我有一个看起来像这样的 Neo4j 图

enter image description here

它具有使用 CHILD_OF 关系的关系层次结构。
所有绿色节点(见)都是书籍的权利。
父母可以看到的所有书籍也对孩子可见,但反过来不行。
此外,孩子有可能在不涉及父母的情况下直接看书。

这里的问题是找到从孩子到书籍的最短路径。
在这种情况下,C1 有 2 条路径(通过权利)到 Book1,但只有 1 条到 Book2。 Book3 没有。

enter image description here

Neo4j Cypher 查询应仅返回从 C1 到所有书籍的最短路径。

我尝试使用 Neo4j shortestPath 函数,但它不起作用。

MATCH (c:Child {name:'C1'} ),(b:Book),p = shortestPath((c)-[*]-(b))
RETURN p

查询输出返回:

enter image description here

所需的最终图表应如下所示:

enter image description here

解决方法

您需要将关系设为从 Child 到 Book 的方向。这是因为当你输入 * 时,它会包含一个你不需要的从 book3 到 library 的路径。

MATCH (c:Child {name:'C1'} ),(b:Book),p = shortestPath((c)-[*]->(b))
RETURN p

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。