Java: JGraphT: itérer nœuds
Question
Je suis en train 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?
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);
}
En outre, comment puis-je ajouter des poids de bord?
Modifier Cela semble fonctionner assez bien. Mais est-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)));
}
La solution
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);
Autres conseils
vous pouvez imprimer toutes les informations du graphique en utilisant la fonction toString()
sur votre graphique, par exemple si vous avez un h graphique, vous pouvez le faire:
System.out.println(h.toString());
Sur cette route, vous verrez le graphique en 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 est un peu difficile, mais vous pouvez créer la belle visualisation graphique.
En outre, vous pouvez utiliser le http://www.graphviz.org où vous pouvez formater les informations de votre graphique comme vous l'avez fait déjà et le programme construit le graphe, comme dans cet exemple, si vous tapez le code (le code de l'exemple de la toile):
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 va construire ce graphique: http://www.graphviz.org/content/fsm
Je vous écris ici le web: http://www.graphviz.org/ . J'espère que je pourrais vous aider, si je trouve plus d'informations ou quelque chose plus facile, je vais vous dire.
Pd. Désolé pour mon anglais J'espère que vous pouvez comprendre tout
Au lieu d'utiliser DefaultEdge
dans le code donné par Aaron, vous devez réellement utiliser DefaultWeightedEdge