У меня есть графы, которые я хочу объединить, то есть создать новый граф, состоящий из объединения ребер и узлов графа (без повторения). Есть ли реализация для этого в JUNG или мне нужно сделать это самостоятельно?
Как объединить два графа в JUNG?
Ответы (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
Спасибо, но теперь у меня другое сомнение. Есть ли способ получить гигантский связанный компонент графа или мне нужно использовать класс WeakComponentClusterer и перебирать все кластеры, чтобы найти гигантский?
- person Paulo; 24.08.2011
Ответ на ваш второй вопрос содержится в stackoverflow.com/questions/7182052/
- person Joshua O'Madadhain; 31.08.2011