【问题标题】:How to draw edges with Jung library?如何使用 Jung 库绘制边缘?
【发布时间】:2017-05-24 15:25:26
【问题描述】:

我有一个 Graph 的实现,我想使用 JUNG 将其可视化。我的问题是,当我添加一条边时,我会看到 2 条边,例如 1 到 2 和 2 到 1 具有相同的权重,但我只想看到 1 条边。

我的代码:

public void createGraph(HashMap<Integer, Vertice<Integer, Integer>> vertices, long[][] matriz) {

    if (vertices != null) {

        Graph<Vertice<Integer, Integer>, Arista<Integer, Integer>> ig = new SparseMultigraph<Vertice<Integer, Integer>, Arista<Integer, Integer>>();
        for (int i = 0; i < vertices.size(); i++) {
            ig.addVertex(vertices.get(i));
        }


        for (int i = 0; i < matriz.length; i++) {
            for (int j = 0; j < i; j++) {
                if(matriz[i][j] > 0){
                    Arista<Integer, Integer> a= new Arista(vertices.get(i), vertices.get(j), (int)matriz[i][j]);
                    ig.addEdge(a, vertices.get(i), vertices.get(j));
                }                   
            }
        }


        VisualizationImageServer<Vertice<Integer, Integer>, Arista<Integer, Integer>> vs = new VisualizationImageServer<Vertice<Integer, Integer>, Arista<Integer, Integer>>(
                new KKLayout<Vertice<Integer, Integer>, Arista<Integer, Integer>>(ig), new Dimension(680, 340));
        vs.setBackground(Color.GRAY);


        Transformer<Vertice<Integer, Integer>, Paint> vertexColor = new Transformer<Vertice<Integer, Integer>, Paint>() {
            @Override
            public Paint transform(Vertice<Integer, Integer> i) {
                return Color.GREEN;
            }
        };

        vs.getRenderContext().setVertexFillPaintTransformer(vertexColor);


        vs.getRenderContext().setVertexLabelTransformer(new ToStringLabeller<Vertice<Integer, Integer>>());
        vs.getRenderer().getVertexLabelRenderer().setPosition(Position.CNTR);


        vs.getRenderContext().setEdgeLabelTransformer(new Transformer<Arista<Integer, Integer>, String>() {
            public String transform(Arista<Integer, Integer> e) {
                return (e.toString());
            }
        });

        this.add(vs, BorderLayout.CENTER);
    }
}

【问题讨论】:

  • 您的问题可能出在创建边缘的双 for 循环中。您的 matriz 结构是否有冗余信息,例如是matriz[i][j] == matriz[j][i]?
  • 是的... matriz[i][j] == matriz[j][i]
  • 但这就是为什么我只是在下三角矩阵中迭代。

标签: java graph jung


【解决方案1】:

您有一个无向图,因此您应该使用UndirectedGraph 的实现。 SparseMultigraph 允许有向和无向边,默认的边方向性是“有向的”。

您想要的课程可能是UndirectedSparseGraph

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多