2011-08-23 4 views
0

J'ai des graphes que je veux unir, c'est-à-dire créer un nouveau graphe composé par l'union des arêtes et des nœuds du graphe (sans répétition). Y a-t-il une implémentation pour ce qui est disponible dans JUNG ou est-ce que je l'ai fait moi-même?Comment unir deux graphiques dans JUNG?

Répondre

0

Il n'y a pas une mise en œuvre pour que JUNG, mais il est à peu près six lignes de code en supposant que les graphiques, les sommets et les arêtes sont des mêmes types:

 
// 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)); 
} 

Vous pouvez sauter le sommet ajouter s'il n'y a pas de sommets isolés (c'est-à-dire, des sommets qui n'ont pas de bords incidents); addEdge() ajoutera des sommets incidents.

Si le graphique est dirigé, vous aurez envie de changer le ci-dessus pour

g.addEdge(e, g1.getSource(e), g1.getDest(e));

Doublons sont ignorées en silence (si vous voulez savoir si un ajout a eu un effet, vérifiez la valeur de retour) .

+0

Merci, mais maintenant j'ai un autre doute. Existe-t-il un moyen d'obtenir le composant géant connecté d'un graphique ou dois-je utiliser la classe WeakComponentClusterer et parcourir tous les clusters pour trouver le géant? – Paulo

+0

Vous trouverez une réponse à votre deuxième question sur http://stackoverflow.com/questions/7182052/jung-how-to-get-the-giant-connected-component-of-a-graph –