кодирование связанных узлов в графе

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

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


person user41685    schedule 08.12.2008    source источник


Ответы (4)


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

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

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

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

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

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

person Dima    schedule 08.12.2008
comment
думаю, что матрица смежности - это то, что я хочу. хотите сделать что-то простое, например, найти узлы, которые наиболее связаны друг с другом. Можете ли вы дать мне представление о том, как создать матрицу смежности из java pov... где вводом будет матрица nxn, на основе которой будут созданы узлы - person user41685; 08.12.2008

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

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

person grossvogel    schedule 08.12.2008

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

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

person Tom    schedule 08.12.2008

Возможно, дубликат "Хорошая библиотека графических алгоритмов Java?". Короткий ответ: посмотрите на JGraphT.

person Joe Liversedge    schedule 08.12.2008