簡體   English   中英

Java:JGraphT:遍歷節點

[英]Java: JGraphT: Iterate through nodes

我正在嘗試遍歷所有節點,因此可以將它們打印出來以供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)));            
    }

您可以使用函數toString()在圖形上打印圖形的所有信息,例如,如果您有圖形h,則可以執行以下操作:

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

這樣,您將看到一條直線的圖形。 另一方面,您可以可視化將坐標分配給頂點的圖形,例如使用圖形:

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

問題,您必須實現某些功能,在此鏈接中有一個示例http://kickjava.com/src/org/jgrapht/demo/JGraphAdapterDemo.java.htm

我認為這有點困難,但是您可以創建漂亮的圖形可視化。

另外,您可以使用Web 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:對不起,我的英文我希望你能理解。

嘗試使用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);

而不是在Aaron提供的代碼中使用DefaultEdge ,您應該實際使用DefaultWeightedEdge

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM