簡體   English   中英

獲取 JGraphT 中的所有子圖

[英]Get all subgraphs in JGraphT

如何在List<MyGraph>Set<MyGraph>集合中獲取 JGraphT 中圖形的所有可能子圖? 我已經閱讀了 JGraphT 的文檔,但是我找不到任何可以幫助我解決這個特定問題的東西。

這個問題的答案取決於 OP 是想要頂點誘導子圖還是邊誘導子圖。 要在 JGraphT 中創建頂點或邊誘導子圖,請使用AsSubgraph class。 沒有一種方法可以簡單地生成所有可能的子圖,因為這是一個非常不常見的過程,但您自己很容易實現。 請注意,有2^n可能的頂點誘導子圖,其中n是頂點數。 所以子圖的數量是巨大的。

  1. 創建一個 List<Set> 包含所有可能的頂點子集。 這被稱為 powerset (有很多關於如何生成 powerset 的帖子)
  2. 對於 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 function,可以在 SO 上找到許多示例。 要計算邊誘導子圖,請重復上述步驟,但使用 graph.edgeSet() 代替 graph.vertexSet();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM