获取jgrapht中的所有子图

wnrlj8wa  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(533)

如何在一个图的jgrapht中得到所有可能的子图 List<MyGraph> 或者 Set<MyGraph> 收藏?我已经阅读了jgrapht的文档,但是在这个问题上我找不到任何帮助。

dnph8jn4

dnph8jn41#

这个问题的答案取决于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);

要实现powerset函数,可以在so上找到许多示例。要计算边诱导子图,请重复上述步骤,但不要使用graph.vertexset(),而是使用graph.edgeset();

相关问题