如何在List<MyGraph>
或Set<MyGraph>
集合中的JGraphT中获得图形的所有可能的子图?我已经阅读了JGraphT的文档,但是找不到任何可以帮助我解决该特定问题的东西。
这个问题的答案取决于OP是否需要顶点诱导子图或边诱导子图。要在JGraphT中创建顶点或边诱导的子图,请使用AsSubgraph类。没有一种方法可以简单地生成所有可能的子图,因为这是一个非常不常见的过程,但是你很容易实现。请注意,2^n
可能存在顶点诱导子图,其中n
顶点数。因此,子图的数量巨大。
AsSubgraph
。粗略地讲,代码如下所示:
//Initiate some graph. The vertex/edge type is irrelevant for this question
Graph<Integer,DefaultEdge> graph = new SimpleGraph<>(DefaultEdge.class);
...
//Generate powerset
List<Set<Integer>> powerSet = powerSet(graph.vertexSet());
//Create subgraphs:
for(Set<Integer> subset : powerSet)
Graph<Integer,DefaultEdge> subGraph = new AsSubgraph(graph, subset);
要实现powerSet函数,可以在SO上找到许多示例。要计算边缘诱发的子图,请重复上述步骤,但要使用graph.edgeSet()代替graph.vertexSet();