7

I am trying to randomly traverse through the graph in jgrapht (until I find some target node). To do it, I need to start at the sourceNode, randomly pick any coming out edge and follow it.

I know there there is a method getAllEdges(sourceVertex, targetVertex) that returns all the edges between two given nodes. But how can I get all edges while having only sourceNode, without the target one?

4

5 回答 5

4

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

于 2015-06-30T07:57:20.013 回答
2

outgoingEdgesOf您可以使用图形对象的方法访问节点(顶点)的传出边。

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

此外,您可以incomingEdgesOf用于传入边缘。

如果要访问节点的所有边,请使用

graph.edgesOf(source)
于 2020-05-17T10:43:48.333 回答
1

任何实现接口的对象Graph<V,E>都应该有方法edgesOf(V vertex),至少根据API。你TransportGraph应该能够做到这一点。

于 2015-07-14T07:19:22.273 回答
0

万一有人想知道,我没有找到任何直接的方法来实现这一点,所以我从评论中接受了 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,

于 2015-06-19T12:25:04.843 回答
-2

我试图评论milez的答案,但我错误地将其写为答案。所以,让我们写下答案。Milez 建议使用 JGrapht 库,我自己使用过几次并且效果很好。这个库有一个我认为符合要求的 RandomWalkIterator 类。

于 2017-08-31T14:35:33.407 回答