在neo4j中使用dijkstra算法时如何限制深度?

时间:2014-01-03 06:55:15

标签: java neo4j dijkstra

我在neo4j中应用dijkstra算法进行遍历,因为我想要从源到目的地的成本最低的路径。是否有可能获得从源到目的地最便宜的路径,其边数最多为'n'? 我目前的代码是:

public static PathFinder<WeightedPath> dijkstraTraverser = GraphAlgoFactory.dijkstra(expander, "cost");

在正常遍历中,我可以在路径长度上设置一个上限,如下所示:

public static final TraversalDescription allTraverser = baseTraverser.evaluator( Evaluators.toDepth( 3 ) );

使用dijkstra算法遍历图时是否有任何方法可以应用相同的上限?

我正在使用neo4j v2.0

1 个答案:

答案 0 :(得分:0)

听起来你需要一个单独的对象来跟踪某个状态,即给定路径的总成本;即在评估者中,您需要计算Path的成本,然后返回正确的评估。

创建一个存储最便宜路径的评估器;以不切实际的高价值开始;每次遇到路径时,请更新您看到的最便宜的费用,如果路径比您看到的最便宜,则返回Evaluation.INCLUDE_AND_CONTINUE;否则返回Evalution.EXCLUDE_AND_PRUNE

如果您有一些额外的上限,您希望执行,这只是评估者的一个小额外条件;如果总路径费用是> =您的限制,则排除并修剪。

http://api.neo4j.org/2.0.0/org/neo4j/graphdb/traversal/Evaluator.html#evaluate%28org.neo4j.graphdb.Path%29