Как удалить i строку и j столбец и перенести оставшиеся строки/столбцы в новую матрицу c++

Недавно изучаю c++. Возникла проблема, что мне нужно вычислить алгебраическое дополнение матрицы. Чтобы его вычислить, нужно удалить i строку и j столбец в уже созданной матрице и перенести оставшиеся строки и столбцы в другую матрицу. Я попытался это сделать, но по всей видимости, там проблемы с индексами при присвоении их в новую матрицу. Я знаю в чём проблема, но не могу эту штуку пофиксить. Экспериментировал с разными индексами, но не получилось. Помогите, пожалуйста. Код ниже:

int count = 0;
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            double** addition = new double* [n - 1]; // Матрица на порядок ниже, чтобы найти минор

            for (int x = 0; x < (n - 1); x++)
            {
                addition[x] = new double[n - 1];
            }

            for (int x = 0; x < n; x++)
            {
                for (int y = 0; y < n; y++)
                {
                    if (x != i or y != j)
                    {
                        addition[x - 1][y - 1] = matrix_copy[x][y]; // Проблема с циклами для x и y и с условием.
                    }
                }
            }
            last_matrix[i][j] = addition_find(addition, n - 1, pow(-1, i + j));
            cout << last_matrix[i][j] << " " << i << j << endl; // Если выводим алгебраическое дополнение Aij, то их будет всего 5
            cout << count;
            delete[] addition;
        }
    }

Проблема с частью кода для цикла:

for (int x = 0; x < n; x++)
{
    for (int y = 0; y < n; y++)
    {
        if (x != i or y != j)

Как сделать в данных циклах, чтобы у меня в новую матрицу (addition) переносились все элементы, кроме i строки и j столбца?


Ответы (1 шт):

Автор решения: Harry

Как-то так, например...

for (int x = 0, row = 0; x < n; x++, row++)
{
    if (x == i) { row--; continue; }
    for (int y = 0, col = 0; y < n; y++, col++)
    {
        if (y == j) { col--; continue; }
        addition[row][col] = matrix_copy[x][y];
    }
}

Если x строки, а y столбцы (но вроде так у вас и есть).

Можно и по-другому. Но в принципе можно вычислять дополнение, и не создавая новую матрицу.

→ Ссылка