2009-11-17 13 views
2

J'essaie de parcourir tous les nœuds, donc je peux les imprimer pour graphviz. Quelle est la meilleure façon de le faire en utilisant la bibliothèque JGraphT?Java: JGraphT: Itérer par les nœuds

public static void main(String[] args) { 
    UndirectedGraph<String, DefaultEdge> g = new SimpleWeightedGraph<String, DefaultEdge>(DefaultEdge.class); 

    String odp = "ODP"; 
    String cck = "CCK"; 
    String mfe = "MFE"; 

    g.addVertex(odp); 
    g.addVertex(cck); 
    g.addVertex(mfe); 

    g.addEdge(odp, cck); 
    g.addEdge(odp, mfe); 

} 

De plus, comment ajouter des poids de bord?

Modifier: Cela semble fonctionner plutôt bien. Mais y a-t-il une meilleure façon?

Set<DefaultEdge> edges = g.edgeSet(); 

    for (DefaultEdge e : edges) { 
     gv.addln(String.format("\"%s\" -> \"%s\"", g.getEdgeSource(e), g.getEdgeTarget(e)));    
    } 

Répondre

0

Essayez d'utiliser WeightedGraph au lieu de UndirectedGraph (en réponse à votre deuxième question sur l'ajout de poids):

WeightedGraph<String, DefaultEdge> g = new SimpleWeightedGraph<String, DefaultEdge>(DefaultEdge.class); 

String odp = "ODP"; 
String cck = "CCK"; 
String mfe = "MFE"; 

g.addVertex(odp); 
g.addVertex(cck); 
g.addVertex(mfe); 

DefaultEdge e1 = g.addEdge(odp, cck); 
DefaultEdge e1 = g.addEdge(odp, mfe); 

g.setEdgeWeight(e1, 10); 
g.setEdgeWeight(e2, 4); 
0

Au lieu d'utiliser DefaultEdge dans le code donné par Aaron, vous devriez réellement utiliser DefaultWeightedEdge

1

vous pouvez imprimer toutes les informations du graphique en utilisant la fonction toString() sur votre graphique, par exemple si vous avez un graphique h, vous pouvez le faire:

System.out.println(h.toString());

Sur cette voie, vous verrez le graphique dans une ligne. D'autre part, vous pouvez visualiser le graphique allocation aux coordonnées vertexs, par exemple avec votre graphique:

positionVertexAt(ODP, 130, 40); 
positionVertexAt(CCK, 60, 20); 
positionVertexAt(MFE, 240, 140); 

problème, que vous devez mettre en œuvre une fonction, vous avez un exemple dans ce lien http://kickjava.com/src/org/jgrapht/demo/JGraphAdapterDemo.java.htm.

Je pense que c'est un peu difficile, mais vous pouvez créer la visualisation graphique agréable. En outre, vous pouvez utiliser le web http://www.graphviz.org où vous pouvez formater les informations de votre graphique comme vous l'avez déjà fait, puis le programme construire le graphique, comme dans cet exemple si vous tapez ce code (est le code de l'exemple de le web):

digraph finite_state_machine { 
rankdir=LR; 
size="8,5" 
node [shape = doublecircle]; LR_0 LR_3 LR_4 LR_8; 
node [shape = circle]; 
LR_0 -> LR_2 [ label = "SS(B)" ]; 
LR_0 -> LR_1 [ label = "SS(S)" ]; 
LR_1 -> LR_3 [ label = "S($end)" ]; 
LR_2 -> LR_6 [ label = "SS(b)" ]; 
LR_2 -> LR_5 [ label = "SS(a)" ]; 
LR_2 -> LR_4 [ label = "S(A)" ]; 
LR_5 -> LR_7 [ label = "S(b)" ]; 
LR_5 -> LR_5 [ label = "S(a)" ]; 
LR_6 -> LR_6 [ label = "S(b)" ]; 
LR_6 -> LR_5 [ label = "S(a)" ]; 
LR_7 -> LR_8 [ label = "S(b)" ]; 
LR_7 -> LR_5 [ label = "S(a)" ]; 
LR_8 -> LR_6 [ label = "S(b)" ]; 
LR_8 -> LR_5 [ label = "S(a)" ]; 

}

le programme construira ce graphique: http://www.graphviz.org/content/fsm

Je vous écris sur le web ici: http://www.graphviz.org/. J'espère que je pourrais vous aider, si je trouve plus d'informations ou quelque chose de plus facile, je vais vous le dire.

Pd: Désolé pour mon anglais J'espère que vous pouvez tout comprendre.

+0

cela devrait être accepté réponse –