в программировании на С, как мы можем инициализировать это int * goo, где goo - это список ребер графа? - PullRequest
0 голосов
/ 28 января 2011

В программировании на С, как мы можем инициализировать это int *goo, где goo - это список ребер графа?

1 Ответ

2 голосов
/ 28 января 2011

Одномерный целочисленный массив в общем случае не может использоваться для интуитивного хранения графа, т. Е. Без какого-либо кода отображения.

Существует как минимум два распространенных способа математического представления графа в матрице /массив.Предполагая 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 ++, и это достаточно веская причина для меня)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...