Frage

Ich versuche zu durchlaufen alle Knoten, so dass ich sie aus für graphviz drucken. Was ist der beste Weg, das zu tun, um die JGraphT Bibliothek?

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

}

Auch, wie füge ich Kantengewichte?

Edit: Das scheint ziemlich gut zu funktionieren. Aber gibt es einen besseren Weg?

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

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

Lösung

Versuchen WeightedGraph statt UndirectedGraph (in Antwort auf Ihre zweite Frage über das Hinzufügen von Gewichten) mit:

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

Andere Tipps

können Sie alle Daten des Graphen drucken mit der Funktion toString() über dem Diagramm, zum Beispiel, wenn Sie ein Diagramm h haben, können Sie es tun:

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

Auf diese Weise werden Sie die Grafik in einer Linie sehen. Auf der anderen Seite können Sie die grafische Darstellung Zuweisung Koordinaten zu dem vertexs, zum Beispiel mit Ihrem Diagramm visualisieren:

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

Problem, dass Sie eine Funktion zu implementieren, haben Sie ein Beispiel in diesem Link http://kickjava.com/src/org/jgrapht/demo/JGraphAdapterDemo.java.htm .

Ich denke, ist ein wenig schwierig, aber man kann die schöne Graph Visualisierung erstellen.

Darüber hinaus können Sie das Web benutzen http://www.graphviz.org wo Sie die Informationen formatieren Ihr Diagramms wie Sie haben bereits und dann die graph des Programm zu bauen, wie in diesem Beispiel, wenn Sie diesen Code eingeben (der Code des Beispiels der Bahn):

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)" ];

}

Das Programm wird diese Grafik bauen: http://www.graphviz.org/content/fsm

Ich schreibe die Bahn Sie hier: http://www.graphviz.org/ . Ich hoffe, ich konnte dir helfen, wenn ich mehr Informationen oder etwas finden, einfacher Ich werde Ihnen sagen.

Pd:. Sorry für mein Englisch Ich hoffe, Sie alle verstehen können,

Statt DefaultEdge im Code von Aaron gegeben zu verwenden, sollten Sie tatsächlich nutzen DefaultWeightedEdge

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top