簡體   English   中英

從 jgrapht 中的節點獲取所有邊

[英]Getting all edges going out from a node in jgrapht

我試圖隨機遍歷 jgrapht 中的圖形(直到找到一些目標節點)。 為此,我需要從 sourceNode 開始,隨機選擇任何出來的邊緣並跟隨它。

我知道有一個方法getAllEdges(sourceVertex, targetVertex)可以返回兩個給定節點之間的所有邊。 但是如何在只有 sourceNode 而沒有目標的情況下獲得所有邊?

您可以直接使用 Graphs.predecessorListOf 和 Graphs.successorListOf api。

您可以使用圖對象的outgoingEdgesOf方法訪問節點(頂點)的傳出邊。

Set<MyEdge> edges = myGraph.outgoingEdgesOf(sourceNode);

此外,您可以對傳入邊使用incomingEdgesOf

如果要訪問節點的所有邊,請使用

graph.edgesOf(source)

任何實現接口Graph<V,E>都應該有方法edgesOf(V vertex) ,至少根據API 您的TransportGraph應該能夠做到這一點。

如果有人想知道,我沒有找到任何直接的方法來實現這一點,所以我從評論中選擇了 Balkrishna 的建議。 我的實現(Java 8 風格)是:

   private List<WeightedEdge> getAllEdgesFromNode(TransportGraph graph, MyNode startNode) {
    return graph.unwrap().edgeSet().stream()
            .filter(weightedEdge -> graph.unwrap().getEdgeSource(weightedEdge).equals(startNode))
            .collect(Collectors.toList());
}

注意:TransportGraph 是我自己編寫的 jgrapht 圖的包裝器。 我的方法 unwrap() 返回 SimpleDirectedWeightedGraph,

我試圖評論 milez 答案,但我錯誤地將其寫為答案。 所以,讓我們寫下答案。 Milez 建議使用 JGrapht 庫,我自己用過幾次,效果很好。 這個庫有一個我認為滿足要求的 RandomWalkIterator 類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM