кодирование связанных узлов в графе - PullRequest
1 голос
/ 08 декабря 2008

Я пытаюсь сделать граф в Java, который будет иметь разные узлы. некоторые узлы будут связаны с другими, а некоторые нет. Если они связаны, то некоторое логическое значение для этого узла будет истинным, а другая переменная будет содержать значение узла, к которому она подключена.

... какие-либо предложения о том, что вы, ребята, считаете лучшим способом подойти к этому?

Ответы [ 4 ]

3 голосов
/ 08 декабря 2008

Два наиболее распространенных способа представления графа - это матрица смежности и списки смежности. Пусть n будет количеством узлов.

Матрица смежности A - это матрица логических значений n x n, так что A (i, j) = 1, если узлы i и j связаны, и 0, если они не связаны.

В представлении списков смежности для каждого узла вы ведете список узлов, к которым он подключен (смежен).

Вопрос теперь в том, что вы хотите сделать с графиком. Если это что-то простое, возможно, имеет смысл накатить свое. Если нет, вы можете покопаться в Интернете, чтобы найти библиотеку Java для работы с графиками. JGraphT было упомянуто.

Если вы хотите использовать матрицу смежности, вы можете легко представить ее в Java как двумерный массив значений типа bool или int. Вам нужно будет дать каждому узлу индекс. Самый простой способ сделать это, чтобы сохранить ваши объекты Node в массиве, всегда в том же порядке. Таким образом, у вас действительно будет две структуры данных: массив узлов, которые представляют собой объекты, представляющие собой ваши узлы, и матрица смежности, которая ссылается на узлы по их индексам.

Как только вы заполнили матрицу, вы можете легко найти узел, который связан с большинством других узлов, сложив значения (0 и 1) во всех столбцах (или строках) и найдя максимум. Надеюсь, это поможет.

2 голосов
/ 08 декабря 2008

Существует две стандартные модели для хранения графиков. Том описывает только Список смежностей . Другой будет автономная Матрица смежности .

Если вы заботитесь об эффективности, изучите разреженность вашей ситуации (чем больше граней, тем более приемлемой является матричная версия). Если перф не проблема, используйте то, что вы предпочитаете программировать ...

1 голос
/ 08 декабря 2008

Создайте класс Node и присвойте ему переменную экземпляра типа Node. Инициализируйте его как ноль - если указанный узел подключен к другому узлу, то эта переменная экземпляра будет ссылаться на него; в противном случае он останется нулевым.

Если узел может быть подключен к многочисленным узлам (что довольно часто встречается для графиков), используйте ArrayList для хранения всех узлов, к которым подключен указанный узел.

0 голосов
/ 08 декабря 2008

Возможно, дубликат ' Хорошая библиотека алгоритмов граф Java? '. Краткий ответ будет выглядеть на JGraphT .

...