簡體   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