как создать подграф с помощью jgrapht

Я использую jgrapht в Java для работы сетевого алгоритма. Сначала я читаю список смежности, а затем создаю граф на основе jgrapht. Теперь, учитывая подмножество узлов с именем subNodes, я хотел бы создать подграф. Я пытаюсь использовать класс Subgraph, как показано в этой ссылке Однако у меня не могло получиться так, чтобы это сработало.

import org.jgrapht.*;
import org.jgrapht.graph.*;
......

HashMap<Integer, HashSet<Integer>> adjacencyList = new HashMap<Integer, HashSet<Integer>>();
\\fill out adjacency list

\\create your graph
Graph<Integer, DefaultEdge> myGraph =  new SimpleGraph<>(DefaultEdge.class);
 
int numNodes = ...;
for(int i = 0 ; i <numNodes; i++) 
  myGraph.addVertex(i);
    

for(int i = 0 ; i< numNodes; i++) { 
    if(adjacencyList.get(i) != null) {
        for(Integer j : adjacencyList.get(i)) {
            myGraph.addEdge(i, j);
        }
    }
}
Set<Integer> subNodes = new HashSet<Integer>(); 
\\generate a sub set of vertices to have a subgprah

Аналогичный пост находится здесь, но это также нет помощи.


person whitepanda    schedule 23.09.2020    source источник
comment
Что именно не сработало?   -  person Joris Kinable    schedule 24.09.2020


Ответы (1)


Кажется, вы имеете в виду какой-то старый javadoc. Не уверен, почему вы специально используете версию 1.1.0. Вот пример использования jgrapht версии 1.5:

public class SubGraphExample {
    public static void main(String[] args){
        Graph<Integer, DefaultEdge> g = new SimpleGraph<>(DefaultEdge.class);
        Graphs.addAllVertices(g, Arrays.asList(1,2,3,4));
        g.addEdge(1,2);
        g.addEdge(2,3);
        g.addEdge(3,4);
        g.addEdge(4,1);
        System.out.println("Graph: "+g);

        //Subgraph
        Set<Integer> vertexSubset = new HashSet<>(Arrays.asList(1,2));
        Graph<Integer, DefaultEdge> subgraph = new AsSubgraph<>(g, vertexSubset);
        System.out.println("Subgraph: "+subgraph);
    }
}

Выход:

Graph: ([1, 2, 3, 4], [{1,2}, {2,3}, {3,4}, {4,1}])
Subgraph: ([1, 2], [{1,2}])

Вы всегда должны смотреть на примеры, включенные в тестовые каталоги. Класс AsSubgraph поставляется с классом AsSubgraphTest, который можно найти в набор тестов. Последнюю версию javadoc (1.5.0 на момент написания) можно найти здесь: https://jgrapht.org/javadoc/

person Joris Kinable    schedule 24.09.2020