Распечатка 2-мерных массивов в зависимости от ранга

Для выполнения домашнего задания нам было поручено создать связующие деревья для каждого графика, разделить их по регионам и позже отобразить их связующие деревья в порядке возрастания.

У меня есть функция, которая выполняет поиск в ширину, чтобы определить связанные компоненты на графике, а затем передает регион функции, которая создает связующее дерево для каждого региона. Я хочу отобразить мои окончательные двумерные массивы связующего дерева, основываясь на количестве «дорог» или ненулевых элементов, которые у него есть. Все двумерные массивы являются матрицами смежности.

Я объявил массив 2d массивов в моем объявлении класса как

int** spantreelist[10];

Мои деревья — это двумерные матрицы смежности, объявленные

int** trees;

и динамически распределяется позже.

Я назначаю свои спантреи таким образом:

spantreelist[newcount] = tree; //newcount = number of non 0 elements, different for each tree
for (int i = 0; i < 10; i++)
for (int y = 0; y < cities; y++)
for (int r = 0; r < cities; r++)
{
spantreelist[i][y][r] = tree[y][r];

}

Однако, когда я позже вызываю свой последний spantreelist, чтобы напечатать мои 2d массивы, я получаю ошибку сегментации.

for (i = 0; i < 10; i++)
for (j = 0; j < cities; j++)
for (k = 0; k < cities; k++)
cout << spantreelist[i][j][k] <--- seg fault here.

Странная часть, если я просто напишу
соиЬ << спантри [2] [3] [4] // 2

Я получаю значение, которое я хотел.

Любые советы о том, как правильно поместить 2d-массивы в массив, были бы хорошими.

-1

Решение

В C ++ нет такого понятия, как «2d array». Есть только массивы. Некоторые из них содержат другие массивы. Другие содержат указатели, которые иногда указывают на другие массивы. Ссылаясь на эти конструкции как на 2D, все вводит в заблуждение и лучше избегать.

У вас есть массив из 10 указателей под названием spantreelist,

spantreelist[newcount] = tree;

Это присваивает одному элементу spantreelist массив, проиндексированный newcount, Все остальные элементы не инициализируются.

for (i = 0; i < 10; i++)
....
spantreelist[i][y][r] = tree[y][r];

for (i = 0; i < 10; i++)
....
cout << spantreelist[i][j][k]

Эти два фрагмента имеют доступ ко всем элементам spantreelist массив, проиндексированный от 0 до 9. Все они, кроме одного, неинициализированы. Доступ к неинициализированному элементу массива не определен.

Лучший способ справиться с массивами в C ++ — использовать стандартные шаблоны классов библиотек. std::vector а также std::array,

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]