Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在给定的两个节点之间找到路径?_Java_Neo4j - Fatal编程技术网

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

Java 如何在给定的两个节点之间找到路径?,java,neo4j,Java,Neo4j,如何在neo4j Java API中找到给定两个节点之间的路径,路径的所有权重的乘积在两个节点之间的所有路径中都是最大的,我该怎么办? 在我的图形数据库中,有两个元素:一个是node,另一个是relationship,所有元素都有一个name属性,但该关系还有一个额外的属性:weight(双精度类型,以及(0,1)中的值) public static ArrayList<Path> getAllOptPaths(Long startNodeId, Long endNodeId, Gr

如何在neo4j Java API中找到给定两个节点之间的路径,路径的所有权重的乘积在两个节点之间的所有路径中都是最大的,我该怎么办? 在我的图形数据库中,有两个元素:一个是node,另一个是relationship,所有元素都有一个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;       
}
publicstaticarraylistgetalloptpath(长startNodeId、长endNodeId、GraphDatabaseService db){
ArrayList optPathsBetweenTwoNodes=新ArrayList();
try(事务tx=db.beginTx()){
Node node1=db.getNodeById(startNodeId);
节点node2=db.getNodeById(endNodeId);
PathExpander PathExpander=PathExpanders.allTypesAndDirections();
CostEvaluator CostEvaluator=CommonEvaluator.doubleCostEvaluator(“成本”);
//查找给定两个节点之间的所有路径
PathFinder dijkstraPathsFinder=GraphAlgoFactory.dijkstra(路径扩展器,成本评估器);
加权路径路径=dijkstraPathsFinder.findSinglePath(节点1,节点2);
optpathsbetweetwonodes.add(路径);
成功();
}捕获(例外e){
e、 printStackTrace();
}
返回两个节点之间的optpathsb;
}

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


包含加权路径查询的示例。此外,该函数将帮助您指定如何计算(和加权)路径。

在cypher查询中也可以探索路径。这可以为您提供加权路径计算的结果(以及权重最小的路径)


包含加权路径查询的示例。此外,该函数将帮助您指定如何计算(和加权)您的路径。

这个问题已经由我自己解决了,方法是修改neo4j核心JAVA API的源代码。在修改源代码的过程中,涉及到一些具体的文档,如下:Dijkstra.JAVA、BestFirstSelectoryFactory.JAVA、GraphAlgoFactory.JAVA、Path.JAVA、WeightedPathImpl.JAVA、WeightedPathIterator.JAVA在修改的细节中,你可以发邮件给我。

这个问题已经由我自己解决了,方法是修改neo4j core JAVA API的源代码。在修改源代码的过程中涉及到一些具体的文档,如下:Dijkstra.JAVA、BestFirstSelectoryFactory.JAVA、GraphAlgoFactory.JAVA、Path.JAVA、WeightedPathImpl.JAVA、WeightedPathIterator.java。如果有人对修改的详细信息感兴趣,可以给我发邮件。

我认为更改代码库不是一个好主意。在使用函数setProperty()设置关系属性(例如边的权重)时,可以使用键“Cost”设置边的权重.

我认为更改代码库不是一个好主意。当使用函数setProperty()设置关系属性(例如边的权重)时,可以使用键“Cost”设置边的权重这不是一个理想的答案。这种类型的答案应该作为评论。我知道,你不能发表评论,只要你达到50个声誉。考虑阅读这不是一个理想的答案。这种类型的答案应该作为评论。我知道,你不能发表评论,你达到50个声誉。考虑阅读此。