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

时间:2015-06-16 19:55:44

标签: java graph jgrapht jgraph

我试图在jgrapht中随机遍历图形(直到找到一些目标节点)。要做到这一点,我需要从sourceNode开始,随机选择任何出来的边缘并遵循它。

我知道有一个方法getAllEdges(sourceVertex, targetVertex)可以返回两个给定节点之间的所有边。但是,如果只有sourceNode而没有目标,那么如何才能获得所有边缘?

5 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

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

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

graph.edgesOf(source)

答案 3 :(得分:0)

实现接口Graph<V,E>的任何对象都应该具有方法edgesOf(V vertex),至少根据API。您的TransportGraph应该可以执行此操作。

答案 4 :(得分:-2)

我试图评论里程碑答案,但我错误地把它写成答案。 那么,让我们写下答案。 Milez提议使用JGrapht库,我已经多次使用它并且工作得非常好。 这个库有一个RandomWalkIterator类,我认为它符合要求。