Javaの:JGraphT:ノードを繰り返し処理
質問
私は、すべてのノードを反復処理しようとしているので、私はgraphvizのためにそれらをプリントアウトすることができます。 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);
}
また、どのように私は、エッジの重みを追加するには?
の編集のこれはかなりうまく動作するようです。しかし、より良い方法はありますか?
Set<DefaultEdge> edges = g.edgeSet();
for (DefaultEdge e : edges) {
gv.addln(String.format("\"%s\" -> \"%s\"", g.getEdgeSource(e), g.getEdgeTarget(e)));
}
解決
WeightedGraph代わりのUndirectedGraphを使用してみてください(重みを加えることについて、あなたの2番目の質問への答えで):
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);
他のヒント
あなたは、グラフhを持っている場合、あなたはそれを行うことができます例えば、あなたのグラフ上の関数toString()
を使用して、グラフのすべての情報を印刷することができます:
System.out.println(h.toString());
この方法では、あなたは、行のグラフが表示されます。 一方、あなたがグラフで例えばvertexsに座標を割り当てるグラフを可視化することができます:
positionVertexAt(ODP, 130, 40);
positionVertexAt(CCK, 60, 20);
positionVertexAt(MFE, 240, 140);
問題、あなたには、いくつかの機能を実装する必要があること、あなたがこのリンク<のhref =「http://kickjava.com/src/org/jgrapht/demo/JGraphAdapterDemo.java.htm」のrel =」の例を持っていますnofollowを "> http://kickjava.com/src/org/jgrapht/demo/JGraphAdapterDemo.java.htm を。
私は少し難しいと思いますが、あなたは素敵なグラフの視覚化を作成することができます。
また、あなたが情報をフォーマットすることができますウェブ http://www.graphviz.org に使用することができますあなたのグラフのあなたはすでにやったし、プログラムこの例では、あなたがこのコードを入力する場合のように、グラフを構築するには(ウェブの例のコードである)のように:
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)" ];
}
http://www.graphviz.org/content/fsm:プログラムは、このグラフを構築しますA>
私はここであなたにウェブを書く: http://www.graphviz.org/ に。 私はより多くの情報や簡単に何かを見つけた場合、私はあなたを教えてくれます、私はあなたを助けることを願っています。
のPd:私の英語のため申し訳ありませんが、私はあなたがすべてを理解することができると思います。
。の代わりにアーロンによって与えられたコードでDefaultEdge
を使用するのではなく、あなたが実際にDefaultWeightedEdge
を使用する必要があります。