2008-12-08 3 views
1

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

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

ответ

1

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

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

3

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

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

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

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

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

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

+0

думаю, что матрица смежности - это то, что я хочу. хотите сделать что-то простое, например, найти узлы, которые наиболее связаны между собой. можете ли вы дать мне представление о том, как создать матрицу смежности из java pov ... где input будет представлять собой матрицу nxn, на основе которой будут созданы узлы – user41685 2008-12-08 03:50:46

2

Существует две стандартные модели для хранения графиков. Один Том описывает Adjacency List. Другой будет автономным Adjacency Matrix.

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