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)));            
    }
Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top