2012-05-06 3 views
4

dans JUNG 1.7.6 il y avait la fonction copy() dans ce but (myGraph.copy()), mais dans JUNG 2.0 cette fonction n'existe plus. Je n'ai pas trouvé d'autre possibilité de créer une copie d'un objet graphique. Je serais très heureux si quelqu'un pouvait m'aider. Une solution de contournement serait bien aussi.Comment copier un graphique dans le framework JUNG 2.0?

Merci beaucoup!

Répondre

0

Vous pouvez copier le graphique manuellement en itérant sur tous les sommets et toutes les arêtes et en les ajoutant à un nouveau graphique. Voir getVertices() dans l'API

+0

Si j'ai un graphique la fonction getVertices() retourne une collection avec les sommets. La fonction getEdges() renvoie une collection avec les identifiants de front, mais je ne reçois pas les sommets qui sont connectés par ce bord ... la seule façon de voir quels sommets sont connectés par un bord spécifique est d'imprimer le graph.toString() méthode ... – user1377963

7

code ci-dessous avec les génériques, vous devez donc remplacer V et E avec String pour votre Graph<String, String>.

Graph<V, E> src; 
    Graph<V, E> dest; 

    for (V v : src.getVertices()) 
     dest.addVertex(v); 

    for (E e : src.getEdges()) 
     dest.addEdge(e, src.getIncidentVertices(e)); 
+0

Ceci est fondamentalement correct, mais un nitpick et une amélioration: (1) vous ne devez pas remplacer V, E par String, mais avec les types de votre graphique (et si vous créez votre propre statique méthode dont vous n'aurez même pas besoin ou que vous ne voulez pas faire). (2) Si vous savez a priori que tous vos sommets ont des bords incidents, et que vous utilisez les classes Graph fournies par JUNG, vous pouvez omettre la première boucle; addEdge ajoutera les bords incidents s'ils ne sont pas présents. –

0

Vous pouvez faire une simple copie des sommets & arêtes, qui créeraient un nouveau graphique, mais les objets à l'intérieur seront passés par référence afin que vous pouvez utiliser cette bibliothèque de clonage https://code.google.com/p/cloning/

et faire un copie complète:

Cloner cloner = new Cloner(); 
Graph<V, E> clonedGraph = cloner.deepClone(graph); 
Questions connexes