Преобразуйте верхнюю треугольную матрицу в полную матрицу C ++ - PullRequest
1 голос
/ 15 июля 2011

Как будет выглядеть код, который может преобразовать верхнюю треугольную матрицу в полную матрицу. Матрица в векторе, а не в двумерном массиве ...

так что массив

[ 1 2 3 4
  0 5 6 7
  0 0 8 9
  0 0 0 10 ]

станет массивом:

[ 1 2 3 4
  2 5 6 7
  3 6 8 9
  4 7 9 10 ]

Не могли бы вы дать какие-то идеи, я думал о применении какого-то модуля или чего-то еще ...

Существует одно ограничение: Я не использую двумерные массивы Я использую вектор, так что это одномерный массив

1 Ответ

1 голос
/ 15 июля 2011

Во-первых, вы должны понять фундаментальную природу отраженной матрицы.Для любого i, j верно следующее утверждение:

m[i][j] ≡ m[j][i]

Итак, вам нужен некоторый алгоритм, чтобы сделать это верно.Могу я предложить:

for(int i = 0; i < HEIGHT; ++i)
  for(int j = 0; j < i; ++j)
    m[i][j] = m[j][i];

Обратите внимание на состояние 2-го цикла.Убедившись, что j всегда меньше i, мы ограничиваем нашу деятельность нижним левым треугольником.

Далее вы должны понимать, как реализована двумерная матрица в одномерноймассив.Похоже, что вы установили личность:

m[i][j] ≡ v[i*WIDTH+j]

Подставляя, мы имеем:

for(int i = 0; i < HEIGHT; ++i)
  for(int j = 0; j < i; ++j)
    v[i*WIDTH+j] = v[j*WIDTH+i];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...