Ну, как все заметили, это график. Вопрос в том, является ли это разреженным или плотным графом? Обычно существует два способа представления графиков (больше, но вам, вероятно, нужно будет рассмотреть только эти два):
- матрица смежности
- список смежностей
Матрица смежности - это, в основном, матрица NxN, в которой все узлы в первой строке и столбце хранятся, а данные соединения (ребра) представлены в виде ячеек, поэтому вы можете индексировать ребра по вершинам. Извините, если мой английский отстой, а не мой родной язык. В любом случае, вам следует учитывать матрицу смежности только в том случае, если у вас плотный граф и вам нужно очень быстро найти соединения узел-> ребро-> узел. Однако итерация по соседям или добавление / удаление вершин в матрице смежности выполняется медленно, первая требует N итераций, а вторая изменяет размер массива / вектора, который вы используете для хранения матрицы.
Другой вариант - использовать список смежности. По сути, у вас есть класс, представляющий узел, и класс, представляющий ребро, в котором хранятся все данные для этого ребра, и два указателя, которые указывают на узлы, к которым он подключен. Класс узла имеет некоторую коллекцию (список подойдет) и отслеживает все ребра, к которым он подключен. Тогда вам понадобится класс менеджера или просто набор функций, которые работают на ваших узлах. Добавление / соединение узлов в этом случае тривиально, как и перечисление соседей или связанных ребер. Однако итерировать по всем краям сложнее. Эта структура более гибкая, чем матрица смежности, и она лучше для разреженных графов.
Я не уверен, что полностью понял ваш вопрос, но если бы я понял, вам лучше воспользоваться матрицей смежности, похоже, у вас плотный граф с множеством взаимосвязанных узлов и вам нужна только информация о соединении .
В Википедии есть хорошая статья о графиках как структуре данных, а также хорошие ссылки и ссылки, и поиск примеров не должен быть трудным. Надеюсь, это поможет:
Ссылка