2009-11-17 192 views
2

我想遍歷所有節點,所以我可以將它們打印出來用於graphviz。使用JGraphT庫的最佳方法是什麼?Java: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)));    
    } 

回答

0

嘗試使用WeightedGraph代替UndirectedGraph(在回答你的第二個問題,關於添加的權重):

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

而是由亞倫給出的代碼中使用DefaultEdge的,你應該實際使用DefaultWeightedEdge

1

您可以使用圖形上的功能toString()打印圖表的所有信息,例如如果您有圖形h,則可以執行此操作:

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

通過這種方式,您將看到一行中的圖形。 在另一方面,你可以直觀的圖形座標分配到vertexs,例如您的圖表:

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

問題,那你必須實現一些功能,你在這個環節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

我寫信給你這裏的網址:http://www.graphviz.org/。 我希望我可以幫助你,如果我找到更多的信息或更容易我會告訴你。

Pd:對不起,我的英語我希望你能理解所有。

+0

這應該是接受的答案 – 2014-08-22 01:32:32