0
У меня есть массив, представляющий граф. Я хотел бы преобразовать его в список смежности типа (i,j)
с i<j
(поэтому нет двойных данных). У меня есть одна проблема, до сих пор:Как преобразовать матрицу в список смежности в C++
- Я не знаю, как получить доступ к массиву и изменить его, я не компилируется код, приведенный ниже, но пока я уверен, что
list[node]->..
не правильно ..
Это мой код до сих пор, без массива:
struct node {
public:
int number;
node* next;
};
class AdjList {
public:
void initialize (node* list);
void convert (bool** array, node* list);
void make (node*list, int number, int node);
private:
};
void AdjList::initialize (node* list) {
for (int i=0; i<10; i++) {
list[i]->next = NULL;
}
}
void AdjList::make(node* list, int num, int node) {
if (list[node]->next == NULL) {
node* New = new node*;
list->[node]->next = New;
New->next = NULL;
New->number = num;
}
else {
node* New = list[node];
while (New->next != NULL)
New = New->next;
node* New2 = new node*;
New->next = New2;
New2->number = num;
}
}
void AdjList::convert(bool** array, node* list) {
for (int i=0; i<10; i++) {
for (int j=i+1; j<10; j++) {
if (array[i][j] == true)
make(list, j, i);
}
}
}
int main() {
node* list[10];
}
Стандартные контейнеры сделают вашу жизнь намного проще. Посмотрите на 'std :: list'. – Yuushi
Я бы использовал 'std :: list' с' std :: pair' 'typedef std :: list> AdjList;' Теперь 'AdjList' представляет собой список пар. –
andre
Do ** not ** использовать 'std :: list', это совершенно неправильный контейнер здесь и будет очень неэффективным. Используйте 'std :: vector'. Кроме того, список смежности на самом деле представляет собой список списков - т. Е. Вектор std :: vector>. –