[英]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.