爪哇: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(在回答第二个问题关于添加权重):
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);
其他提示
您可以使用该函数打印图表的所有信息 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.
我认为有点困难,但你可以创建漂亮的图形可视化。
此外,您还可以使用网络 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/。我希望我能帮助你,如果我找到更多信息或更容易的事情,我会告诉你。
钯:抱歉我的英语我希望你能理解。
相反由亚伦给出的代码中使用DefaultEdge
的,实际上应该使用DefaultWeightedEdge
不隶属于 StackOverflow