繁体   English   中英

如何找到给定两个节点之间的路径?

[英]How can I find a path between given two nodes?

如何在neo4j Java API中找到给定两个节点之间的路径,该路径的所有权重的乘积在两个节点之间的所有路径中最大,该怎么办? 在我的图形数据库中,有两个元素:一个是节点,另一个是关系,所有元素都具有name属性,但是该关系具有一个额外的属性:weight(双精度类型,并且值在(0,1]中)。如下:如何修改?

public static ArrayList<Path> getAllOptPaths(Long startNodeId, Long endNodeId, GraphDatabaseService db){
    ArrayList<Path> optPathsBetweenTwoNodes = new ArrayList<Path>();
    try (Transaction tx = db.beginTx()){
        Node node1 = db.getNodeById(startNodeId);
        Node node2 = db.getNodeById(endNodeId);

        PathExpander<Object> pathExpander = PathExpanders.allTypesAndDirections();
        CostEvaluator<Double> costEvaluator = CommonEvaluators.doubleCostEvaluator("Cost");

        // find all paths between given two nodes
        PathFinder<WeightedPath> dijkstraPathsFinder = GraphAlgoFactory.dijkstra(pathExpander, costEvaluator);
        WeightedPath path = dijkstraPathsFinder.findSinglePath(node1, node2);

        optPathsBetweenTwoNodes.add(path);

        tx.success();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return optPathsBetweenTwoNodes;       
}

在密码查询中也可以探索路径。 因此,可以为您提供加权路径计算的结果(以及加权最小的路径)。

该网页包含加权路径查询的示例。 另外, Neo4j reduce功能将帮助您指定如何计算(和称重)路径。

这个问题已由我自己解决,方法是修改neo4j核心JAVA API的源代码。在修改源代码的过程中,涉及一些特定的文档,如下所示:Dijkstra.java,BestFirstSelectoryFactory.java,GraphAlgoFactory.java,Path.java WeightedPathImpl.java,WeightedPathIterator.java。 如果有人对修改的细节感兴趣,可以发送邮件给我。

我认为更改代码库不是一个好主意。 使用功能setProperty()设置关系的属性(例如,边缘的权重)时,可以使用键“成本”来设置边缘的权重。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM