В JUNG нет реализации для этого, но речь идет о шести строках кода, предполагающих, что графы, вершины и ребра имеют одинаковые типы:
// given Graph g1, g2
Graph g = new [appropriate Graph implementation]
for (V v : Collections.union(g1.getVertices(), g2.getVertices())) {
g.addVertex(v);
}
for (E e : g1.getEdges()) {
g.addEdge(e, g1.getEndpoints(e));
}
for (E e : g2.getEdges()) {
g.addEdge(e, g2.getEndpoints(e));
}
Вы можете пропустить добавление вершины, если нет изолированных вершин (то есть вершин, у которых нет инцидентных ребер); addEdge()
добавит любые инцидентные вершины.
Если график направлен, вы можете изменить вышеприведенное значение на
g.addEdge(e, g1.getSource(e), g1.getDest(e));
Дубликаты игнорируются (если вы хотите узнать, оказало ли добавление эффект, проверьте возвращаемое значение).