-3
나는 Graph의 구현을 가지고 있고 그것을 Jung으로 시각화하고 싶다. 내 문제는 가장자리를 추가 할 때 두 개의 가장자리를 시각화하는 것입니다. 예를 들어 1에서 2로, 2에서 1로 동일한 가중치로 시각화하지만 한 개의 가장자리 만보고 싶습니다.Jung 라이브러리로 가장자리를 그리는 방법은 무엇입니까?
내 코드 : 당신이 UndirectedGraph
의 구현을 사용해야하므로
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]'입니까? – Oneiros
예 ... matriz [i] [j] == matriz [j] [i] – Mishale
그러나 그 이유는 아래 삼각형 행렬에서 반복하는 것입니다. – Mishale