2016-03-15 4 views
3

У меня есть одна вершина (вершина A), соединенная с двумя разными вершинами (B & C). Но он дублируется и показывает, что одна и та же вершина (A) связана с двумя разными вершинами (B & C). Как я могу сделать одну вершину (А) с 2-х ребер выходит и подключен к B & C.Удаление повторяющихся вершин в графе с использованием JGraphX ​​

for (int i = 0; i < cardList.getSize(); i++) { 
     try { 

      Object v1 = graph.insertVertex(graph.getDefaultParent(), null, Card, x, y, cardWidth, cardHeight); 
      Object v2 = graph.insertVertex(graph.getDefaultParent(), null, card.getConnectedCard(i), x + cardWidth + 50, y, cardWidth, cardPanelHeight); 
      Object e1 = graph.insertEdge(graph.getDefaultParent(), null, "", v1, v2); 

     } finally { 
      graph.getModel().endUpdate(); 
     } 
    } 
+0

добавления фрагмента кода будут полезны для другие отвечают. –

+0

Добавил фрагмент кода, используемый для рисования графика – span

+0

Для этого: вы вызываете 'insertVertex' несколько раз и задаетесь вопросом, почему вершина вставлена ​​несколько раз? – Marco13

ответ

1

Проблема заключается в том, что вы звоните insertVertex несколько раз. Каждый раз будет создана новая вершина. Хотя я не очень знаком с JGraphX, и код, предоставленный до сих пор далеко не компилируется, то проблема, вероятно, может быть решена путем вставки вершины и ребра отдельно:

// First, insert all vertices into the graph, and store 
// the mapping between "Card" objects and the corresponding 
// vertices 
Map<Card, Object> cardToVertex = new LinkedHashMap<Card, Vertex>(); 
for (int i = 0; i < cardList.getSize(); i++) 
{ 
    Card card = cardList.get(i); 
    Object vertex = graph.insertVertex(
     graph.getDefaultParent(), null, card, x, y, cardWidth, cardHeight); 
    cardToVertex.put(card, vertex); 
}   

// Now, for each pair of connected cards, obtain the corresponding 
// vertices from the map, and create an edge for these vertices 
for (int i = 0; i < cardList.getSize(); i++) 
{ 
    Card card0 = cardList.get(i); 
    Card card1 = card0.getConnectedCard(i); 

    Object vertex0 = cardToVertex.get(card0); 
    Object vertex1 = cardToVertex.get(card1); 
    Object e1 = graph.insertEdge(
     graph.getDefaultParent(), null, "", vertex0, vertex1); 
}