我试图在密集图中找到从一组源节点到一组目标节点的最短路径。连接的一个例子是
(节点1) - [:ConnectsTo] - GT;(节点2) - [...] - >(节点N) - >(NodeM)
我遇到的挑战是NodeN可能连接到NodeM,其中两个节点都在我的目标列表中。当我的目标列表中的任何节点到达时,我想停止遍历路径。
Match (t:TestNode),(m:Node) where t.NODE_ID=m.NODE_ID with m MATCH path=shortestPath((m:Node)-[r:ConnectsTo*0..5]->(n:Node) ) where n.NODE_ID in ['123','283','21232','244464','35102','38591','53011'] RETURN last(nodes(path)),collect(extract(e IN nodes(path)| e.name))
输出的一个例子是:
[[DF2396, GMPP, DelHub], [DF2396, GMPP]]
其中GMPP和DelHub都是目标,而GMPP与DelHub有连接,因此我想停止并仅返回GMPP的第二条路径。
如果您想了解更多详情,请与我们联系。
答案 0 :(得分:0)
我相信我的答案已经解决了。我为检查节点和排除路径的路径添加了“not any”,其中目标集中的节点不是路径中的最后一个节点。我还通过路径集合中的展开来改进了返回集的格式。
Match (t:TestNode),(m:Node) where t.NODE_ID=m.NODE_ID with m MATCH path=shortestPath((m:Node)-[r:ConnectsTo*0..5]->(n:Node) ) where n.NODE_ID in ['123','283','21232','244464','35102','38591','53011'] and not any(x in nodes(path) where x.NODE_ID in ['123','283','21232','244464','35102','38591','53011'] and x<>last(nodes(path))) with collect(extract(e IN nodes(path)| e.name)) as paths unwind (paths) as sequences