2017-05-24 3 views
-3

グラフの実装があり、JUNGを使って可視化したいと思います。私の問題は、私がエッジを追加すると、私は2つのエッジ、例えば1と2、2と1を同じ重さで視覚化しますが、私はただ1つのエッジを見たいと思っています。Jungライブラリでエッジを描く方法は?

マイコード:

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); 
    } 
} 
+0

あなたの問題はおそらくエッジを作成するループfor doubleにあります。あなたの 'matriz'構造は、重複した情報を持っていますか? 'matriz [i] [j] == matriz [j] [i]'ですか? – Oneiros

+0

はい... matriz [i] [j] == matriz [j] [i] – Mishale

+0

しかし、それがなぜ私は下三角行列で反復しているのですか? – Mishale

答えて

1

あなたは無向グラフを持っているので、あなたがUndirectedGraphの実装を使用する必要があります。 SparseMultigraphは、有向エッジと無向エッジの両方を許可し、デフォルトのエッジ方向性は「directed」です。

希望のクラスはおそらくUndirectedSparseGraphです。

関連する問題