我正在使用Neo4J存储网络拓扑并执行一些图形算法,如Dijkstra和allSimplePaths(使用apoc程序)。
我需要知道是否可以使用allSimplePaths的输出作为Dijkstra算法的输入。换句话说,在allSimplePaths过程返回的子图上运行Dijkstra算法。
我的疑问是:
1)
MATCH (startNode:Hosts {IP:"10.0.0.1"}), (endNode:Hosts {IP:"10.0.0.4"})
CALL apoc.algo.allSimplePaths(startNode, endNode, 'Link2', 6 ) YIELD path
RETURN path
2)
MATCH (startNode:Hosts {IP:"10.0.0.1"}), (endNode:Hosts {IP:"10.0.0.4"})
CALL apoc.algo.dijkstra(startNode, endNode, 'Link2', 'BANDOUT') YIELD path, weight
RETURN path, weight
那么,我如何将这两个查询绑定到一个?我使用的是Neo4j 3.0.3和apoc 3.0.4。
答案 0 :(得分:2)
原始Dijkstra algorithm不会将简单路径(即没有重复顶点的路径)的集合作为输入 - 它只是将起始和结束顶点(和图形)作为输入。 APOC过程是该算法的实现,因此无法按照您的要求执行操作。
事实上,如果你已经有两个顶点之间的简单路径的集合,那么无论如何都不需要使用Dijkstra算法。您只需要在每个简单路径中对边的权重求和 - 并且具有最小总和的路径将是您的结果。 (但是,我怀疑这种技术总体上比仅使用Dijkstra算法获得结果更昂贵。)