2016-03-12 2 views
0

Donc, j'ai visualisé avec succès un graphique en utilisant purement JGraphX. Maintenant, j'aimerais créer une matrice d'adjacence. Une méthode que je pourrais penser est d'obtenir toutes les cellules d'une cible cellulaire particulière (ou pointe vers) et aussi toutes ses cellules parentales. Cependant, je n'arrive pas à trouver une méthode JGraphX ​​appropriée à utiliser dans la documentation. Y a-t-il réellement une méthode JGraphX ​​pour cela?JGraphX ​​- Obtenir toutes les cellules cibles d'une cellule

Sinon, existe-t-il d'autres moyens ou approches que vous pourriez suggérer?

Merci.

J'ai déjà trouvé un moyen, en quelque sorte. Mais je vais laisser cette question au cas où d'autres en auraient besoin.

Mon approche: Je crée deux ArrayList, matrixListFrom et matrixListTo. Chaque fois que je connecte des arêtes, j'ajoute l'étiquette de vertex one à matrixFrom et l'étiquette de vertex two à matrixTo. Et puis je l'associaient à cette méthode:

public int createAdjacencyMatrix(int adMatrix, String strFromVertex, String strToVertex) 
    { 
     for(int k = 0;k<matrixListFrom.size();++k) 
     { 
      if((matrixListFrom.get(k)).equals(strFromVertex) && (matrixListTo.get(k)).equals(strToVertex)) 
      { 
       adMatrix = 1; 
       break; 
      } 
      else if((matrixListFrom.get(k)).equals(strToVertex) && (matrixListTo.get(k)).equals(strFromVertex)) 
      { 
       adMatrix = -1; 
       for(int j = 0;j<matrixListFrom.size();++j) 
       { 
        if((matrixListFrom.get(j)).equals(strFromVertex) && (matrixListTo.get(j)).equals(strToVertex)) 
        { 
         adMatrix = 1; 
         break; 
        } 
       } 
       break; 
      } 
      else if(!(matrixListFrom.get(k)).equals(strFromVertex) && !(matrixListTo.get(k)).equals(strToVertex)) 
      { 
       adMatrix = 0; 
      } 

      else if(strFromVertex.equals(strToVertex)) 
      { 
       adMatrix = 0; 
       break; 
      } 

      else 
      { 
       adMatrix = 0; 
      } 
     } 

     return adMatrix; 
    } 

Supposons que nous ayons sommets A, B, C, D, E stocké dans un ArrayList, sommets nommés

matrixListFrom se compose de {A, C, DE} matrixListTo se compose de {D, E, C, B}

Ce qui signifie que A -> D, C -> E, D -> C, E -> B

Ainsi, en utilisant le méthode, les contenus de ces deux listes sont vérifiés un par un. strFromVertex est égal au sommet dans la colonne 0 et strToVertex est le sommet correspondant à comparer des colonnes suivantes en utilisant une boucle for. Ensuite, en utilisant les deux listes de matrices, on vérifie si strFromVertex et strToVertex sont respectivement égaux à matrixListFrom et matrixListTo. Si elles sont parfaitement égales, elles retournent 1, si elles sont inversement égales (la seconde if), elles retournent -1 (ce qui signifie que le sommet de la colonne 0 est le terminal au lieu de la source) et 0 s'il n'y a pas de connexion.

Cependant, je pense que la méthode n'est pas vraiment efficace, en particulier lors de la suppression de sommets. Mais j'ai réussi à le faire fonctionner.

+0

Si vous avez autre façon pourquoi ne pas l'afficher comme une réponse aussi bien? Il pourrait être utile aux autres ... –

+0

@NiekeAerts Parce que je pense que ce n'est pas très efficace. Mais d'accord je le posterai –

Répondre

1

Pour autant que je vois, JGraphX ​​n'a ​​pas construit en option, mais vous pouvez utiliser cette méthode simple:

public static Set<mxICell> getTargetCells(mxICell input) 
{ 
    if(input == null) 
     return Collections.emptySet(); 
    int count = input.getEdgeCount(); 
    Set<mxICell> result = new HashSet<mxICell>(count, 1); 
    for(int i = 0; i < count; i++) 
    { 
     mxICell tmp = input.getEdgeAt(i); 
     if(tmp instanceof mxCell && ((mxCell)tmp).getSource() == input) 
     { 
      result.add(tmp); 
     } 
    } 
    return result; 
} 
+0

En fait j'ai déjà fait une certaine méthode mais merci pour cette réponse! Je vais donner un upvote :) –