我试图在jgrapht中随机遍历图形(直到找到一些目标节点)。要做到这一点,我需要从sourceNode开始,随机选择任何出来的边缘并遵循它。
我知道有一个方法getAllEdges(sourceVertex, targetVertex)
可以返回两个给定节点之间的所有边。但是,如果只有sourceNode而没有目标,那么如何才能获得所有边缘?
答案 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类,我认为它符合要求。