2011-08-23 2 views
0

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

ответ

0

Существует не реализация для этого в 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));

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

+0

Спасибо, но теперь у меня есть еще одно сомнение. Есть ли способ получить гигантский подключенный компонент графика или мне нужно использовать класс WeakComponentClusterer и перебирать все кластеры, чтобы найти гигантский? – Paulo

+0

На ваш второй вопрос ответили http://stackoverflow.com/questions/7182052/jung-how-to-get-the-giant-connected-component-of-a-graph –

Смежные вопросы