Проблема с заполнением матрицы c++

Возникла проблема, что нужно было из исходной матрицы любого порядка сделать обратную. Для этого нужно было найти определитель матрицы. Определитель матрицы я подсмотрел, как найти, но не смог заполнить новую матрицу алгебраическими дополнениями. Не понимаю, почему, но считалась только первая строка. Я недавно пишу на c++, поэтому прошу помощи. Ниже код.

#include <iostream>
#include <locale>

// Функция для нахождения алгебраического дополнения
// n - порядок матрицы, k - элемент исходной матрицы, r = (-1) ^ (i + j)
int addition_find(double** matrix, int n, int k, int r)
{
    for (int k = 0; k < n - 1; k++)
    {
        for (int i = k + 1; i < n; i++)
        {
            int tmp = -matrix[i][k] / matrix[k][k];

            for (int j = 0; j < n; j++)
            {
                matrix[i][j] += matrix[k][j] * tmp;
            }
        }
    }

    int det;
    det = 1;

    for (int i = 0; i < n; i++)
    {
        det *= matrix[i][i];
    }

    return r * k * det;

}


using namespace std;

int main()
{
    setlocale(LC_ALL, "Russian");
    double tmp;
    int n;
    cout << "Введите размерность матрицы (n): ";
    cin >> n;

    double** matrix = new double* [n];

    double** matrix_copy = new double* [n];

    for (int i = 0; i < n; i++)
    {
        matrix[i] = new double[n];
    }

    // Создание копии матрицы

    for (int i = 0; i < n; i++)
    {
        matrix_copy[i] = new double[n];
    }

    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            matrix[i][j] = 1 + rand() % 100;
        }
    }

    // Наполнение копии матрицы

    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            matrix_copy[i][j] = matrix[i][j];
        }
    }


    cout << "Изначальная матрица: " << endl;

    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            cout << matrix[i][j] << " ";
        }
        cout << endl;
    }

    // Приведение матрицы к треугольному виду

    for (int k = 0; k < n - 1; k++) 
    {
        for (int i = k + 1; i < n; i++) 
        {
            tmp = -matrix[i][k] / matrix[k][k];

            for (int j = 0; j < n; j++) 
            {
                matrix[i][j] += matrix[k][j] * tmp;
            }
        }
    }

    cout << "Определитель матрицы: " << endl;


    int det;
    det = 1;

    for (int i = 0; i < n; i++) 
    {
        det *= matrix[i][i];
    }
    cout.precision(2);
    cout << det << endl;

    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            cout << matrix[i][j] << " ";
        }
        cout << endl;
    }

    // Исключаем строки и столбцы

    double** last_matrix = new double* [n];


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


    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 and y != j)
                    {
                        addition[x - 1][y - 1] = matrix_copy[x][y];
                    }
                }
            }
            last_matrix[i][j] = addition_find(addition, n - 1, matrix_copy[i][j], pow(-1, i + j));
            cout << last_matrix[i][j] << " "; // Если выводим алгебраическое дополнение Aij, то их будет всего 4
        }
    }

    return 0;
}

Вывод:

Введите размерность матрицы (n): 5
Изначальная матрица:
42 68 35 1 70
25 79 59 63 65
6 46 82 28 62
92 96 43 28 37
92 5 3 54 93
Определитель матрицы:
1996456730
// Здесь представлена матрица после преобразований, которые позволяют найти определитель
42 68 35 1 70
0 39 38 62 23
0 0 41 -31 30
-1.4e-14 -7.1e-15 0 1.3e+02 -98
2.4e-14 1.9e-14 0 0 2.4e+02
// Здесь представлены только 5 алгебраических дополнений, а не все 25
-6.2e+08 0 -2.1e+09 0 0

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