首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何找到给定两个节点之间的路径?

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

Stack Overflow用户
提问于 2015-08-04 15:29:40
回答 3查看 642关注 0票数 1

如何在neo4j Java API中找到给定两个节点之间的路径,该路径的所有权重的乘积在两个节点之间的所有路径中都是最大的,我该怎么办?在我的图形数据库中,有两个元素:一个是node,另一个是relationship,它们都有一个name属性,但关系有一个额外的属性: weight (double type,value In (0,1])。我的代码如下:如何修改?

代码语言:javascript
复制
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;       
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-22 10:43:57

这个问题是我自己解决的,方法是修改neo4j核心JAVA API.In的源代码。修改源代码的过程涉及到一些具体的文档,如follows:Dijkstra.java、BestFirstSelectoryFactory.java、GraphAlgoFactory.java、Path.java、WeightedPathImpl.java、WeightedPathIterator.java。如果任何人对修改的细节感兴趣,你可以发邮件给我。

票数 0
EN

Stack Overflow用户

发布于 2015-08-04 17:53:34

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

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

票数 0
EN

Stack Overflow用户

发布于 2017-05-26 14:51:42

正如我所想的那样,改变代码库不是一个好主意。在使用函数setProperty()设置关系的属性(例如,边的权重)时,可以使用关键字"Cost“设置边的权重。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31803177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档