2016-03-12 4 views
0

Итак, я успешно визуализировал график, используя только JGraphX. Теперь я хотел бы создать матрицу смежности. Один из методов, о котором я мог подумать, - это получить все ячейки конкретной цели ячейки (или указывает на), а также все ее родительские ячейки. Однако я не мог найти подходящий метод JGraphX ​​для использования в документации.JGraphX ​​- Получение всех целевых ячеек ячейки

Есть ли на самом деле какой-нибудь метод JGraphX? В противном случае, есть ли альтернативные способы или подходы, которые вы могли бы предложить?

спасибо.

Я уже понял способ, как-то. Но я оставлю этот вопрос, если ему это понадобится.

Мой подход: Я создаю два ArrayList, matrixListFrom и matrixListTo. Каждый раз, когда я соединяю ребра, я бы добавил метку вершины к matrixFrom и метку вершины два к matrixTo. И тогда я связал его с помощью этого метода:

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; 
    } 

Пусть мы имеем вершины A, B, C, D, E, сохраненное в ArrayList, названные вершины

matrixListFrom состоит из {A, C, DE} matrixListTo состоит из {D, E, C, B}

что означает -> D, С -> Е, D -> С, Е -> в

Таким образом, с использованием метод, содержимое этих двух списков проверяется один за другим. strFromVertex равен вершине в столбце 0, а strToVertex - соответствующая вершина, которую нужно сравнить с последующими столбцами, используя цикл for. И затем, используя оба списка матриц, проверяется, соответствуют ли strFromVertex и strToVertex соответственно matrixListFrom и matrixListTo. Если они абсолютно равны, он возвращает 1, если они обратно пропорциональны (второе если), то возвращает -1 (что означает, что вершина в столбце 0 является терминалом вместо источника) и 0, если соединение вообще отсутствует.

Однако я считаю, что метод не эффективен, особенно при удалении вершин. Но почему-то мне удалось заставить его работать.

+0

Если у вас есть другой путь, почему бы не разместить его в ответ, а? Это может быть полезно другим ... –

+0

@NiekeAerts Потому что я думаю, что это не очень эффективно. Но хорошо, я отправлю его –

ответ

1

Насколько я вижу, JGraphX ​​имеет встроенный в опции для этого, но вы можете использовать этот простой метод:

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

На самом деле, я уже сделал какой-то метод, но спасибо за этот ответ! Я буду давать upvote :) –