Итак, я успешно визуализировал график, используя только 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, если соединение вообще отсутствует.
Однако я считаю, что метод не эффективен, особенно при удалении вершин. Но почему-то мне удалось заставить его работать.
Если у вас есть другой путь, почему бы не разместить его в ответ, а? Это может быть полезно другим ... –
@NiekeAerts Потому что я думаю, что это не очень эффективно. Но хорошо, я отправлю его –