Как объединить два графа в JUNG?

У меня есть графы, которые я хочу объединить, то есть создать новый граф, состоящий из объединения ребер и узлов графа (без повторения). Есть ли реализация для этого в JUNG или мне нужно сделать это самостоятельно?


person Paulo    schedule 23.08.2011    source источник


Ответы (1)


В 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));

Дубликаты молча игнорируются (если вы хотите знать, имело ли эффект добавление, проверьте возвращаемое значение).

person Joshua O'Madadhain    schedule 23.08.2011
comment
Спасибо, но теперь у меня другое сомнение. Есть ли способ получить гигантский связанный компонент графа или мне нужно использовать класс WeakComponentClusterer и перебирать все кластеры, чтобы найти гигантский? - person Paulo; 24.08.2011
comment
Ответ на ваш второй вопрос содержится в stackoverflow.com/questions/7182052/ - person Joshua O'Madadhain; 31.08.2011