这个问题的答案取决于op需要的是顶点诱导子图还是边诱导子图。要在jgrapht中创建顶点或边诱导子图,请使用assubgraph类。没有一种方法可以简单地生成所有可能的子图,因为这是一个非常不常见的过程,但是很容易自己实现。注意到有 2^n 可能的顶点诱导子图,其中 n 是顶点数。所以子图的数量是巨大的。 创建一个包含所有可能的顶点子集的列表。这被称为powerset(有许多关于如何生成powerset的帖子) 对于powerset中的每个集合,使用 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);
1条答案
按热度按时间dnph8jn41#
这个问题的答案取决于op需要的是顶点诱导子图还是边诱导子图。要在jgrapht中创建顶点或边诱导子图,请使用assubgraph类。没有一种方法可以简单地生成所有可能的子图,因为这是一个非常不常见的过程,但是很容易自己实现。注意到有
2^n
可能的顶点诱导子图,其中n
是顶点数。所以子图的数量是巨大的。创建一个包含所有可能的顶点子集的列表。这被称为powerset(有许多关于如何生成powerset的帖子)
对于powerset中的每个集合,使用
AsSubgraph
.粗略地说,代码如下所示:
要实现powerset函数,可以在so上找到许多示例。要计算边诱导子图,请重复上述步骤,但不要使用graph.vertexset(),而是使用graph.edgeset();