Одномерный целочисленный массив в общем случае не может использоваться для интуитивного хранения графа, т. Е. Без какого-либо кода отображения.
Существует как минимум два распространенных способа математического представления графа в матрице /массив.Предполагая N
пронумерованные вершины и M
ребра:
N x N
матрица смежности .Это двумерный массив, в котором каждая вершина имеет свою собственную линию.
M-sized
список смежностей .По сути, это сводится к списку ребер и может быть реализован в виде массива M x 2
, где каждый ребро имеет свою собственную линию.
Оба этипредставления интуитивно двумерные K x L
массивы.Вы можете использовать одномерный массив, используя дополнительный код для помещения данных в (K * L) x 1
одномерный массив A
.Например, чтобы получить (i, j)
элемент исходного массива K x L
:
e = A[i * L + j];
Тогда вы можете просто динамически распределить массив:
int *A = (int *)malloc(K * L * sizeof(int));
(Прежде, чем кто-то скулит о явномприведение, это необходимо в C ++, и это достаточно веская причина для меня)