首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JGraphT:遍历节点

JGraphT:遍历节点
EN

Stack Overflow用户
提问于 2009-11-17 01:34:14
回答 3查看 5.6K关注 0票数 2

我试图遍历所有节点,这样我就可以打印出它们作为图形。使用JGraphT库做这件事的最好方法是什么?

代码语言:javascript
复制
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);

}

此外,我如何添加边缘权重?

编辑:,这看起来很好。但还有更好的方法吗?

代码语言:javascript
复制
    Set<DefaultEdge> edges = g.edgeSet();

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

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-03-13 06:42:22

尝试使用WeightedGraph而不是UndirectedGraph (在回答关于添加权重的第二个问题时):

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2012-06-07 09:45:44

您可以使用图形上的toString()函数打印图形的所有信息,例如,如果您有一个h图,您可以这样做:

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

在这条路上,你会看到一条线上的图形。另一方面,您可以可视化将坐标分配给顶点的图形,例如用您的图形:

代码语言:javascript
复制
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,您可以像前面那样格式化图形的信息,然后程序构建图形,就像在本例中键入以下代码(是web示例的代码):

代码语言:javascript
复制
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/。我希望我能帮助你,如果我找到更多的信息或更简单的事情,我会告诉你。

对不起,我的英语我希望你能听懂。

票数 1
EN

Stack Overflow用户

发布于 2010-03-13 11:21:02

与其在亚伦给出的代码中使用DefaultEdge,不如实际使用DefaultWeightedEdge

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1746054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档