从jgrapht中的节点获取所有边缘

Getting all edges going out from a node in jgrapht

我试图随机遍历 jgrapht 中的图形(直到找到某个目标节点)。为此,我需要从 sourceNode 开始,随机选择任何出现的边缘并跟随它。

我知道有一种方法 getAllEdges(sourceVertex, targetVertex) returns 两个给定节点之间的所有边。但是,如何在只有源节点而没有目标节点的情况下获得所有边缘?

如果有人想知道,我没有找到任何直接的方法来实现这一点,所以我从评论中采纳了 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() returns SimpleDirectedWeightedGraph,

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

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

我想评论 milez 的答案,但我误把它写成了答案。 所以,让我们写下答案。 Milez 建议使用 JGrapht 库,我自己已经使用过几次并且工作得很好。 这个库有一个 RandomWalkIterator class 我认为符合要求。

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

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

此外,您可以使用 incomingEdgesOf 作为传入边。

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

graph.edgesOf(source)